@syncfusion/ej2-inputs 19.2.60 → 19.3.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +15 -0
  3. package/dist/ej2-inputs.umd.min.js +2 -2
  4. package/dist/ej2-inputs.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-inputs.es2015.js +359 -610
  6. package/dist/es6/ej2-inputs.es2015.js.map +1 -1
  7. package/dist/es6/ej2-inputs.es5.js +371 -627
  8. package/dist/es6/ej2-inputs.es5.js.map +1 -1
  9. package/dist/global/ej2-inputs.min.js +2 -2
  10. package/dist/global/ej2-inputs.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/helpers/e2e/colorpickerHelper.d.ts +23 -0
  13. package/helpers/e2e/colorpickerHelper.js +53 -0
  14. package/package.json +9 -9
  15. package/src/color-picker/color-picker-model.d.ts +7 -0
  16. package/src/color-picker/color-picker.d.ts +6 -0
  17. package/src/color-picker/color-picker.js +10 -1
  18. package/src/maskedtextbox/base/mask-base.js +1 -1
  19. package/src/maskedtextbox/maskedtextbox/maskedtextbox-model.d.ts +1 -4
  20. package/src/maskedtextbox/maskedtextbox/maskedtextbox.d.ts +0 -3
  21. package/src/maskedtextbox/maskedtextbox/maskedtextbox.js +2 -11
  22. package/src/numerictextbox/numerictextbox-model.d.ts +1 -10
  23. package/src/numerictextbox/numerictextbox.d.ts +0 -9
  24. package/src/numerictextbox/numerictextbox.js +52 -96
  25. package/src/slider/slider.d.ts +1 -0
  26. package/src/slider/slider.js +10 -1
  27. package/src/textbox/textbox-model.d.ts +1 -4
  28. package/src/textbox/textbox.d.ts +0 -3
  29. package/src/textbox/textbox.js +91 -113
  30. package/src/uploader/uploader-model.d.ts +1 -26
  31. package/src/uploader/uploader.d.ts +0 -40
  32. package/src/uploader/uploader.js +210 -407
  33. package/styles/bootstrap-dark.css +14 -6
  34. package/styles/bootstrap.css +14 -6
  35. package/styles/bootstrap4.css +22 -12
  36. package/styles/bootstrap5-dark.css +7548 -0
  37. package/styles/bootstrap5-dark.scss +7 -0
  38. package/styles/bootstrap5.css +7548 -0
  39. package/styles/bootstrap5.scss +7 -0
  40. package/styles/color-picker/_bootstrap5-dark-definition.scss +1 -0
  41. package/styles/color-picker/_bootstrap5-definition.scss +134 -0
  42. package/styles/color-picker/_layout.scss +26 -3
  43. package/styles/color-picker/_tailwind-dark-definition.scss +1 -132
  44. package/styles/color-picker/_tailwind-definition.scss +25 -24
  45. package/styles/color-picker/_theme.scss +33 -0
  46. package/styles/color-picker/bootstrap5-dark.css +964 -0
  47. package/styles/color-picker/bootstrap5-dark.scss +11 -0
  48. package/styles/color-picker/bootstrap5.css +964 -0
  49. package/styles/color-picker/bootstrap5.scss +11 -0
  50. package/styles/color-picker/icons/_bootstrap5-dark.scss +1 -0
  51. package/styles/color-picker/icons/_bootstrap5.scss +10 -0
  52. package/styles/fabric-dark.css +15 -7
  53. package/styles/fabric.css +15 -7
  54. package/styles/highcontrast-light.css +15 -7
  55. package/styles/highcontrast.css +16 -8
  56. package/styles/input/_bootstrap5-dark-definition.scss +1 -0
  57. package/styles/input/_bootstrap5-definition.scss +320 -0
  58. package/styles/input/_definition.scss +217 -0
  59. package/styles/input/_fabric-definition.scss +1 -1
  60. package/styles/input/_highcontrast-definition.scss +1 -1
  61. package/styles/input/_layout.scss +196 -157
  62. package/styles/input/_material-dark-definition.scss +133 -120
  63. package/styles/input/_material-definition.scss +1 -0
  64. package/styles/input/_tailwind-dark-definition.scss +1 -315
  65. package/styles/input/_tailwind-definition.scss +50 -47
  66. package/styles/input/_theme.scss +92 -59
  67. package/styles/input/bootstrap-dark.css +12 -3
  68. package/styles/input/bootstrap.css +12 -3
  69. package/styles/input/bootstrap4.css +15 -3
  70. package/styles/input/bootstrap5-dark.css +4670 -0
  71. package/styles/input/bootstrap5-dark.scss +4 -0
  72. package/styles/input/bootstrap5.css +4670 -0
  73. package/styles/input/bootstrap5.scss +4 -0
  74. package/styles/input/fabric-dark.css +12 -3
  75. package/styles/input/fabric.css +13 -4
  76. package/styles/input/highcontrast-light.css +12 -3
  77. package/styles/input/highcontrast.css +13 -4
  78. package/styles/input/icons/_bootstrap5-dark.scss +1 -0
  79. package/styles/input/icons/_bootstrap5.scss +17 -0
  80. package/styles/input/icons/_material-dark.scss +32 -0
  81. package/styles/input/icons/_tailwind-dark.scss +1 -17
  82. package/styles/input/material-dark.css +2320 -201
  83. package/styles/input/material.css +12 -3
  84. package/styles/input/tailwind-dark.css +14 -5
  85. package/styles/input/tailwind.css +14 -5
  86. package/styles/maskedtextbox/_bootstrap5-dark-definition.scss +1 -0
  87. package/styles/maskedtextbox/_bootstrap5-definition.scss +7 -0
  88. package/styles/maskedtextbox/_tailwind-dark-definition.scss +1 -6
  89. package/styles/maskedtextbox/_tailwind-definition.scss +4 -1
  90. package/styles/maskedtextbox/bootstrap5-dark.css +33 -0
  91. package/styles/maskedtextbox/bootstrap5-dark.scss +4 -0
  92. package/styles/maskedtextbox/bootstrap5.css +33 -0
  93. package/styles/maskedtextbox/bootstrap5.scss +4 -0
  94. package/styles/material-dark.css +2337 -218
  95. package/styles/material.css +14 -5
  96. package/styles/numerictextbox/_bootstrap5-dark-definition.scss +1 -0
  97. package/styles/numerictextbox/_bootstrap5-definition.scss +3 -0
  98. package/styles/numerictextbox/_tailwind-dark-definition.scss +1 -5
  99. package/styles/numerictextbox/_tailwind-definition.scss +1 -1
  100. package/styles/numerictextbox/bootstrap5-dark.css +48 -0
  101. package/styles/numerictextbox/bootstrap5-dark.scss +5 -0
  102. package/styles/numerictextbox/bootstrap5.css +48 -0
  103. package/styles/numerictextbox/bootstrap5.scss +5 -0
  104. package/styles/numerictextbox/icons/_bootstrap5-dark.scss +1 -0
  105. package/styles/numerictextbox/icons/_bootstrap5.scss +12 -0
  106. package/styles/numerictextbox/icons/_tailwind-dark.scss +1 -12
  107. package/styles/slider/_bootstrap5-dark-definition.scss +1 -0
  108. package/styles/slider/_bootstrap5-definition.scss +90 -0
  109. package/styles/slider/_fabric-dark-definition.scss +2 -2
  110. package/styles/slider/_layout.scss +294 -69
  111. package/styles/slider/_material-dark-definition.scss +1 -1
  112. package/styles/slider/_tailwind-dark-definition.scss +1 -80
  113. package/styles/slider/_tailwind-definition.scss +32 -27
  114. package/styles/slider/_theme.scss +14 -6
  115. package/styles/slider/bootstrap-dark.css +2 -3
  116. package/styles/slider/bootstrap.css +2 -3
  117. package/styles/slider/bootstrap4.css +7 -9
  118. package/styles/slider/bootstrap5-dark.css +749 -0
  119. package/styles/slider/bootstrap5-dark.scss +5 -0
  120. package/styles/slider/bootstrap5.css +749 -0
  121. package/styles/slider/bootstrap5.scss +5 -0
  122. package/styles/slider/fabric-dark.css +3 -4
  123. package/styles/slider/fabric.css +2 -3
  124. package/styles/slider/highcontrast-light.css +3 -4
  125. package/styles/slider/highcontrast.css +3 -4
  126. package/styles/slider/material-dark.css +16 -16
  127. package/styles/slider/material.css +2 -2
  128. package/styles/slider/tailwind-dark.css +9 -8
  129. package/styles/slider/tailwind.css +7 -3
  130. package/styles/tailwind-dark.css +23 -13
  131. package/styles/tailwind.css +21 -8
  132. package/styles/textbox/_bootstrap5-dark-definition.scss +1 -0
  133. package/styles/textbox/_bootstrap5-definition.scss +0 -0
  134. package/styles/textbox/_tailwind-dark-definition.scss +1 -0
  135. package/styles/textbox/bootstrap5-dark.css +0 -0
  136. package/styles/textbox/bootstrap5-dark.scss +4 -0
  137. package/styles/textbox/bootstrap5.css +0 -0
  138. package/styles/textbox/bootstrap5.scss +4 -0
  139. package/styles/uploader/_bootstrap5-dark-definition.scss +1 -0
  140. package/styles/uploader/_bootstrap5-definition.scss +216 -0
  141. package/styles/uploader/_definition.scss +142 -0
  142. package/styles/uploader/_tailwind-dark-definition.scss +1 -216
  143. package/styles/uploader/_tailwind-definition.scss +21 -21
  144. package/styles/uploader/_theme.scss +2 -2
  145. package/styles/uploader/bootstrap5-dark.css +1079 -0
  146. package/styles/uploader/bootstrap5-dark.scss +6 -0
  147. package/styles/uploader/bootstrap5.css +1079 -0
  148. package/styles/uploader/bootstrap5.scss +6 -0
  149. package/styles/uploader/icons/_bootstrap5-dark.scss +1 -0
  150. package/styles/uploader/icons/_bootstrap5.scss +34 -0
  151. package/styles/uploader/icons/_tailwind-dark.scss +1 -35
  152. package/styles/uploader/material-dark.css +1 -1
  153. package/styles/color-picker/_icons.scss +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"ej2-inputs.umd.min.js","sources":["../src/maskedtextbox/base/mask-base.js","../src/input/input.js","../src/numerictextbox/numerictextbox.js","../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../src/slider/slider.js","../src/form-validator/form-validator.js","../src/uploader/uploader.js","../src/color-picker/color-picker.js","../src/textbox/textbox.js"],"sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide')) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<input placeholder=\"' + placeholder + '\"/>';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject, 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 * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n 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 *\n * @returns {void}\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 if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === \"touchmove\") {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n 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 /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n 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 *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest, 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';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n 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 () {\n _this.resetMaskedTextBox();\n });\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 this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\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 this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4 || this.isTailwind,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[rule] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { updateBlazorTemplate, resetBlazorTemplate, isBlazor, select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n 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 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 * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n 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 if (this.isServerBlazor) {\n this.renderComplete();\n }\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 if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\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 = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.createFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else 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 EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n 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 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) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (!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 // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, \n // eslint-disable-next-line @typescript-eslint/indent\n targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n 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 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 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 listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n 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 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 /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n var fileListData = (isSelectedFile) ? this.filesData = this.filesData.concat(fileData) : fileData;\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 var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n 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) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n /* 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 _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 _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n /* 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) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_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) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string}\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n 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 *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n 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 reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n if (this.isServerBlazor) {\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 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 }\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) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (isBlazor()) {\n _this.currentRequestHeader = beforeEventArgs.currentRequest;\n _this.customFormDatas = beforeEventArgs.customFormData;\n }\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 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 /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent) && !(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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (!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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'presentation' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n 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 *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n 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 HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n 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 this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n }\n 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 // eslint-disable-next-line max-len, @typescript-eslint/no-explicit-any\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 }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.respectiveElement.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n this.raiseChangeEvent(args, true);\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (!(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 *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","split","i","length","splitInnerMask","j","pushIntoRegExpCollec","call","chkSpace","customRegExpCollec","push","hiddenMask","promptChar","escapeMaskValue","promptMask","replace","isNullOrUndefined","customCharacters","RegExp","escapeNumber","match","substring","aria-invalid","applyMask","setElementValue","setMaskValue","value","wireEvents","EventHandler","add","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","isClicked","_this","inputElement","modelValue","toAllowForward","toAllowBackward","eventArgs","maskedValue","container","triggerFocus","floatLabelType","placeholder","setTimeout","backSelectionStart","trigger","blurEventArgs","isFocus","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","Browser","isIE","extend","ctrlKey","keyCode","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","preValue","index","oldValue","prompt_1","elementValue","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","indexOf","toUpperCase","toLowerCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","newVal","BOTTOMLABEL","Input","setValue","getMaskInput","args","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","bindInitialEvent","checkInputValue","addEventListener","parent","getParentNode","floatType","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","makeElement","createElement","createInputContainer","insertBefore","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","properties","inputWrap","appendChild","updateLabelState","getAttribute","setAttribute","checkFloatLabelType","updateIconState","button","wireClearBtnEvents","isBindClearAction","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","setCssClass","cssClass","elements","oldClass","setPlaceholder","textContent","aria-placeholder","setReadonly","isReadonly","setEnableRtl","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","insertAdjacentElement","createClearButton","attrs","_i","_a","Object","keys","_internalRipple","isRipple","argsButton","buttons","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","removeEventListener","parentEle","_onMouseRipple","ele","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","input","createInput","bindClearAction","prop","enableRtl","setPropertyValue","setWidth","width","style","formatUnit","removeFloating","detach","unwireFloatingEvents","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","addIcon","position","icons","internalCreate","result_1","result_2","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","SPINDOWN","INCREMENT","DECREMENT","INTREGEXP","NUMERIC_FOCUS","wrapperAttributes","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","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","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","clear","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","attrArray","getText","focusIn","focusOut","blur","getPersistData","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","MASKINPUT_FOCUS","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","checkBlazor","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","isEnabled","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","handle","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","setCSSClass","sliderContainer","oldCSSClass","isVisible","tooltipElement","showOn","getTheme","window","getComputedStyle","getPropertyValue","sliderTrack","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isMaterialTooltip","orientation","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","Tooltip","showTipPointer","height","animation","open","effect","close","duration","opensOn","beforeOpen","bind","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","getZindexPartial","pos","updateRangeValue","eventName","map","rtl","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","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","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","display","checkRequired","inputType","option","Date","getTime","stringify","uNum","compareTo","Label","Base","DROP_AREA","DROP_WRAPPER","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","DISABLED","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","INVALID_FILE","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","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","isPreloadFiles","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","onDragEnter","dropEffect","dataTransfer","item","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","interopAdaptor","invokeMethodAsync","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","_loop_1","request","_loop_2","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","_loop_3","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","this_1","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","_loop_4","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","singleUpload","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","listElement","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","updateBlazorTemplate","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","list","fileNames","fileData_5","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","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","progressVal","totalChunks","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_4","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","_loop_5","this_3","File","then","uploadFilesRequest","cloneFiles","chunkEnabled","getFileData","name_5","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","_loop_6","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","getInstance","Popup","callBackPromise","Deferred","observeOpenArgs","pageYOffset","pageXOffset","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","len","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","palette","row","tile","roundedColor","columns","aria-selected","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","h","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","dataBind","previewContainer","colorValue","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","enable","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","n","toggle","closePopup","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","s","floor","f","q","t","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","getModel","count_1","reduce","cls","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","interaction","resetInputHandler"],"mappings":"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"}
1
+ {"version":3,"file":"ej2-inputs.umd.min.js","sources":["../src/maskedtextbox/base/mask-base.js","../src/input/input.js","../src/numerictextbox/numerictextbox.js","../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../src/slider/slider.js","../src/form-validator/form-validator.js","../src/uploader/uploader.js","../src/color-picker/color-picker.js","../src/textbox/textbox.js"],"sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide') || (this.inputObj.container.classList.contains('e-static-clear'))) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<input placeholder=\"' + placeholder + '\"/>';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === \"touchmove\") {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'tabindex', 'aria-valuemin',\n 'aria-valuemax', 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.updateHTMLAttrToWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n if (Browser.isDevice && Browser.isIos) {\n this.element.blur();\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n }\n this.renderComplete();\n }\n };\n MaskedTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n MaskedTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getValidClassList(newClass), [this.inputObj.container], this.getValidClassList(oldClass));\n };\n MaskedTextBox.prototype.getValidClassList = function (maskClassName) {\n var result = maskClassName;\n if (!isNullOrUndefined(maskClassName) && maskClassName !== '') {\n result = (maskClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n MaskedTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputObj.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var maskStyle = this.inputObj.container.getAttribute(key);\n maskStyle = !isNullOrUndefined(maskStyle) ? (maskStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.inputObj.container.setAttribute(key, maskStyle);\n }\n else {\n this.inputObj.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if ((this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') ||\n this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) == \"none\") {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4 || this.isTailwind || this.isBootstrap5,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = this.isMaterialTooltip ? 'Always' : (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[rule] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n this.clearAll();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n size: 'Size'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.formRendered();\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n enter: 'enter'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n this.browserName = Browser.info.name;\n this.uploaderName = this.element.getAttribute('name');\n };\n Uploader.prototype.formRendered = function () {\n var parentEle = closest(this.element, 'form');\n if (!isNullOrUndefined(parentEle)) {\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist(['filesData']);\n };\n /**\n * Return the module name of the component.\n *\n * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.updateHTMLAttrToWrapper();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n this.setCSSClass();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\n this.wireActionButtonEvents();\n };\n /* istanbul ignore next */\n Uploader.prototype.serverActionButtonsEventBind = function (element) {\n if (element && !this.isForm) {\n this.browseButton.blur();\n this.actionButtons = element;\n this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n this.uploadButton.focus();\n this.unwireActionButtonEvents();\n this.wireActionButtonEvents();\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.textContent);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.createFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else {\n dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n }\n if (!enableDropText && dropTextArea) {\n remove(dropTextArea);\n }\n }\n else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n this.createDropTextHint();\n this.dropZoneElement = this.uploadWrapper;\n this.setProperties({ dropArea: this.uploadWrapper }, true);\n }\n this.bindDropEvents();\n };\n Uploader.prototype.updateDropArea = function () {\n if (this.dropArea) {\n this.setDropArea();\n }\n else {\n this.dropZoneElement = null;\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (dropTextArea) {\n remove(dropTextArea);\n }\n }\n };\n Uploader.prototype.createDropTextHint = function () {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n };\n Uploader.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n };\n Uploader.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValues = (this.htmlAttributes[pro].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.uploadWrapper], updatedClassValues.split(' '));\n }\n }\n else if (pro === 'style') {\n var uploadStyle = this.uploadWrapper.getAttribute(pro);\n uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[pro]) :\n this.htmlAttributes[pro];\n this.uploadWrapper.setAttribute(pro, uploadStyle);\n }\n else {\n this.uploadWrapper.setAttribute(pro, this.htmlAttributes[pro]);\n }\n }\n }\n }\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n newAttr.value = 'multiple';\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n ++this.count;\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.isFirstFileOnSelection = false;\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.setCSSClass = function (oldCSSClass) {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n }\n var updatedOldCssClass = oldCSSClass;\n if (!isNullOrUndefined(oldCSSClass)) {\n updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var formUpload = this.isFormUpload();\n var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n fileData[0].statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n this.checkActionComplete(true);\n }\n }\n else if (!closest(args.target, '.' + SPINNER_PANE)) {\n this.remove(fileData, false, false, true, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n });\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n };\n ajax.onLoad = function (e) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n this.updateFormData(formData, eventArgs.customFormData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, \n // eslint-disable-next-line @typescript-eslint/indent\n targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n this.selectedFiles = this.selectedFiles.concat(fileData);\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n for (var k = 0; k < fileData.length; k++) {\n if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n }\n }\n }\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n this.raiseActionComplete();\n this.isFirstFileOnSelection = true;\n }\n };\n Uploader.prototype.allowUpload = function () {\n var allowFormUpload = false;\n if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n allowFormUpload = true;\n }\n return allowFormUpload;\n };\n Uploader.prototype.isFormUpload = function () {\n var isFormUpload = false;\n if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n isFormUpload = true;\n }\n return isFormUpload;\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (this.browserName !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.isPreLoadFile = function (fileData) {\n var isPreload = false;\n for (var i = 0; i < this.files.length; i++) {\n if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) && this.files[i].type === fileData.type) {\n isPreload = true;\n }\n }\n return isPreload;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n this.setListToFileInfo(fileData, fileList);\n var result = this.mergeFileInfo(fileData, fileList);\n fileList.setAttribute('data-file-name', result.name);\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, fileList);\n }\n var index = this.listParent.querySelectorAll('li').length;\n if (!fileList.classList.contains(INVALID_FILE)) {\n this.createFormInput(fileData);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n this.renderReactTemplates();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formCustomFileList(fileData, this.element.files);\n }\n else {\n this.createCustomfileList(fileData);\n }\n }\n else if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formFileList(fileData, this.element.files);\n }\n else {\n for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n var listItem = fileData_7[_i];\n var liElement = this.createElement('li', {\n className: FILE,\n attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n if (updateLiStatus) {\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (!isNullOrUndefined(files) && ((!isNullOrUndefined(this.filesData[i].id) &&\n !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n this.filesData[i].id === files.id) : this.filesData[i].name === files.name)) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false,\n customFormData: []\n };\n this.trigger('canceling', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n }\n else {\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = _this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var _this = this;\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadSuccessMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n };\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement)) {\n var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n if (!isNullOrUndefined(spinnerEle)) {\n hideSpinner(liElement);\n detach(spinnerEle);\n }\n }\n this.trigger('success', args, function (args) {\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n _this.trigger('change', { file: _this.uploadedFilesData });\n _this.checkActionButtonStatus();\n if (_this.fileList.length > 0) {\n if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n _this.uploadSequential();\n _this.checkActionComplete(true);\n }\n else {\n /* istanbul ignore next */\n (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n }\n }\n });\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var _this = this;\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args, function (args) {\n _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n else {\n _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = _this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string}\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n var key = attributes_2[_i];\n this.element.removeAttribute(key);\n }\n if (!isNullOrUndefined(this.uploadWrapper)) {\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\n }\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.uploadFiles(uploadFiles_1, custom);\n }\n });\n }\n };\n Uploader.prototype.getFilesInArray = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var file = _this.fileStreams[fileIndex].rawFile;\n try {\n var reader = new FileReader();\n reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n for (var i = 0; i < selectedFiles.length; i++) {\n this.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n var _this = this;\n var cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n });\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n this.chunkUpload(selectedFiles[i], custom, i);\n }\n else {\n ajax.onLoad = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadComplete(e, selectedFiles[i], custom);\n return {};\n }\n };\n ajax.onUploadProgress = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (_this.isFormUpload()) {\n eventArgs.filesData = fileData;\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n var removingFiles = _this.getFilesInArray(fileData);\n var isLiRemoved = false;\n var liIndex = void 0;\n for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n var data = removingFiles_1[_i];\n if (!isLiRemoved) {\n liIndex = _this.fileList.indexOf(data.list);\n }\n if (liIndex > -1) {\n var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n if (inputElement) {\n detach(inputElement);\n }\n _this.spliceFiles(liIndex);\n detach(_this.fileList[liIndex]);\n _this.fileList.splice(liIndex, 1);\n isLiRemoved = true;\n liIndex = -1;\n }\n }\n }\n });\n }\n else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')) {\n eventArgs.filesData = _this.getFilesData();\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearAll();\n }\n });\n }\n else {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = _this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n var _loop_5 = function (files) {\n var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n fileUploadedIndex !== -1)) && validUrl) {\n _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.removeFilesData(files, customTemplate);\n }\n });\n }\n else {\n _this.removeFilesData(files, customTemplate);\n }\n }\n if (args && !args.target.classList.contains(REMOVE_ICON)) {\n _this.checkActionComplete(false);\n }\n };\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n _loop_5(files);\n }\n }\n }\n });\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent)) {\n if (this.browserName !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearData();\n _this.actionCompleteCount = 0;\n _this.count = -1;\n }\n });\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n createPopupOnClick: this.createPopupOnClick,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'presentation' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n if (this.enableOpacity) {\n this.setProperties({ 'value': cValue }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n this.element.setAttribute('role', 'textbox');\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n }\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttrToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.respectiveElement.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n this.raiseChangeEvent(args, true);\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textboxWrapper.container.classList.contains('e-static-clear')) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-placeholder', 'aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","split","i","length","splitInnerMask","j","pushIntoRegExpCollec","call","chkSpace","customRegExpCollec","push","hiddenMask","promptChar","escapeMaskValue","promptMask","replace","isNullOrUndefined","customCharacters","RegExp","escapeNumber","match","substring","aria-invalid","applyMask","setElementValue","setMaskValue","value","wireEvents","EventHandler","add","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","container","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","isClicked","_this","inputElement","modelValue","toAllowForward","toAllowBackward","eventArgs","maskedValue","triggerFocus","floatLabelType","placeholder","setTimeout","backSelectionStart","trigger","blurEventArgs","isFocus","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","Browser","isIE","extend","ctrlKey","keyCode","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","preValue","index","oldValue","prompt_1","elementValue","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","indexOf","toUpperCase","toLowerCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","newVal","BOTTOMLABEL","Input","setValue","getMaskInput","args","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","bindInitialEvent","checkInputValue","addEventListener","parent","getParentNode","floatType","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","makeElement","createElement","createInputContainer","insertBefore","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","properties","inputWrap","appendChild","updateLabelState","getAttribute","setAttribute","checkFloatLabelType","updateIconState","button","wireClearBtnEvents","isBindClearAction","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","setCssClass","cssClass","elements","oldClass","setPlaceholder","textContent","aria-placeholder","setReadonly","isReadonly","setEnableRtl","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","insertAdjacentElement","createClearButton","attrs","_i","_a","Object","keys","_internalRipple","isRipple","argsButton","buttons","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","removeEventListener","parentEle","_onMouseRipple","ele","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","input","createInput","bindClearAction","prop","enableRtl","setPropertyValue","setWidth","width","style","formatUnit","removeFloating","detach","unwireFloatingEvents","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","addIcon","position","icons","internalCreate","result_1","result_2","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","INCREMENT","DECREMENT","INTREGEXP","NUMERIC_FOCUS","wrapperAttributes","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","isNaN","strictMode","trimValue","decimals","roundNumber","hiddenInput","elementPrevValue","renderComplete","isDynamic","attributes_1","htmlAttributes","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","spinDown","title","aria-label","spinUp","wireSpinBtnEvents","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","clear","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","attrArray","getText","focusIn","focusOut","blur","getPersistData","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","MASKINPUT_FOCUS","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","isEnabled","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","Slider","horDir","verDir","transition","handle","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","getTheme","sliderContainer","refresh","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","window","getComputedStyle","getPropertyValue","sliderTrack","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","Tooltip","showTipPointer","height","animation","open","effect","close","duration","opensOn","beforeOpen","bind","beforeCollision","beforeClose","tooltipBeforeClose","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","getZindexPartial","pos","updateRangeValue","eventName","map","rtl","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","color","border","Collection","Complex","regex","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ErrorOption","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","tel","pattern","equalTo","rules","localeFunc","onIntlChange","on","afterLocalization","select","inputElements","selectAll","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","validateRules","data","rules_1","name_1","reset","clearForm","getInputElement","elements_1","errorClass","validClass","off","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","clickHandler","submitHandler","clearEvents","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","display","checkRequired","inputType","option","Date","getTime","stringify","uNum","compareTo","Label","Base","DROP_AREA","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","DISABLED","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","INVALID_FILE","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","abort","cancel","delete","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","size","formRendered","isPureReactComponent","props","keyConfigs","enter","browserName","documentElement","directoryUpload","renderBrowseButton","initializeUpload","isPreloadFiles","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","uploadButtonClick","clearButtonClick","uploadText","clearText","dropAreaWrapper","setDropArea","files","enablePersistence","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","sequentialUpload","length_1","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","updatedOldCssClass","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","resetForm","unWireEvents","targetElement","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","click","dropElement","dragHover","onDragLeave","onPasteFile","onDragEnter","dropEffect","dataTransfer","item","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","custom","ajax","Ajax","asyncSettings","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","removingEventCallback","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","append","updateFormData","customFormData","customData","_loop_1","updateCustomheader","request","_loop_2","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","_loop_3","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","this_1","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","_loop_4","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","listElement","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","list","fileNames","fileData_5","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","fileData_7","data-files-count","textContainer","textElement","fileExtension","preventActionComplete","getSlicedName","nameElement","dataset","tail","fileData_8","scrollWidth","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","Animation","animate","animateProgressBar","extensions","uploadTemplate","compile","exception","isMutiple","isDisabled","fileIndex","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","ceil","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","progressVal","totalChunks","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_3","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","_loop_5","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","createPopupOnClick","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","getInstance","Popup","callBackPromise","Deferred","observeOpenArgs","pageYOffset","pageXOffset","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","len","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","palette","row","tile","roundedColor","columns","aria-selected","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","h","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","dataBind","previewContainer","colorValue","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","enable","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","n","toggle","closePopup","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","s","floor","f","q","t","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","getModel","count_1","reduce","cls","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","interaction","resetInputHandler"],"mappings":"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"}