{"version":3,"file":"ej2.upload.min.js","sources":["../../../../node_modules/@syncfusion/ej2-base/src/util.js","../../../../node_modules/@syncfusion/ej2-base/src/dom.js","../../../../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../../../../node_modules/@syncfusion/ej2-base/src/animation.js","../../../../node_modules/@syncfusion/ej2-base/src/template.js","../../../../node_modules/@syncfusion/ej2-base/src/template-engine.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/position.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../../../../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../../../../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/resize.js","../../../../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../../../../node_modules/@syncfusion/ej2-base/src/ajax.js","../../../../node_modules/@syncfusion/ej2-base/src/event-handler.js","../../../../node_modules/@syncfusion/ej2-base/src/observer.js","../../../../node_modules/@syncfusion/ej2-base/src/base.js","../../../../node_modules/@syncfusion/ej2-base/src/browser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../../../../node_modules/@syncfusion/ej2-base/src/module-loader.js","../../../../node_modules/@syncfusion/ej2-base/src/child-property.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../../../../node_modules/@syncfusion/ej2-base/src/hijri-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../../../../node_modules/@syncfusion/ej2-base/src/component.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/internationalization.js","../../../../node_modules/@syncfusion/ej2-base/src/draggable.js","../../../../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../../../../node_modules/@syncfusion/ej2-base/src/droppable.js","../../../../node_modules/@syncfusion/ej2-base/src/keyboard.js","../../../../node_modules/@syncfusion/ej2-base/src/l10n.js","../../../../node_modules/@syncfusion/ej2-base/src/touch.js","../../../../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../../../../node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../../../../node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../../../../node_modules/@syncfusion/ej2-buttons/src/switch/switch.js","../../../../node_modules/@syncfusion/ej2-buttons/src/chips/chip-list.js","../../../../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../../../../node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","../../../src/ej2-1557059166900/script.js","../../../../node_modules/@syncfusion/ej2-inputs/uploader.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\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 { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', '+' + nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n var windowWidth = window.innerWidth;\n var offsetWidth = (isNullOrUndefined(document.documentElement)) ? 0 : document.documentElement.offsetWidth;\n return windowWidth - (windowWidth - offsetWidth);\n}\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 { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.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 setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var display = this.element.style.display;\n var parentDisplay = void 0;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n if (param.X) {\n this.element.style.left = data.left + 'px';\n }\n if (param.Y) {\n this.element.style.top = data.top + 'px';\n }\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n // Checking the max-zindex value\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n * @private\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER, 'role': role, 'aria-checked': 'false' });\n element.appendChild(input);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n * @private\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n}\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n * @private\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label', innerHTML: options.label });\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n * @private\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","/**\n * Resize library\n */\nimport { isNullOrUndefined, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\nvar elementClass = ['north-west', 'north', 'north-east', 'west', 'east', 'south-west', 'south', 'south-east'];\nvar targetElement;\nvar selectedHandler;\nvar originalWidth = 0;\nvar originalHeight = 0;\nvar originalX = 0;\nvar originalY = 0;\nvar originalMouseX = 0;\nvar originalMouseY = 0;\nvar RESIZE_HANDLER = 'e-resize-handle';\nvar FOCUSED_HANDLER = 'e-focused-handle';\nvar RESTRICT_LEFT = ['e-restrict-left'];\nvar RESIZE_WITHIN_VIEWPORT = 'e-resize-viewport';\nvar minHeight;\nvar maxHeight;\nvar minWidth;\nvar maxWidth;\nvar containerElement;\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true;\nexport function createResize(args) {\n resizeStart = args.resizeBegin;\n resize = args.resizing;\n resizeEnd = args.resizeComplete;\n targetElement = getDOMElement(args.element);\n containerElement = getDOMElement(args.boundary);\n var directions = args.direction.split(' ');\n for (var i = 0; i < directions.length; i++) {\n var resizeHandler = createElement('div', { className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i] });\n targetElement.appendChild(resizeHandler);\n }\n minHeight = args.minHeight;\n minWidth = args.minWidth;\n maxWidth = args.maxWidth;\n maxHeight = args.maxHeight;\n wireEvents();\n}\nfunction getDOMElement(element) {\n var domElement;\n if (!isNullOrUndefined(element)) {\n if (typeof (element) === 'string') {\n domElement = document.querySelector(element);\n }\n else {\n domElement = element;\n }\n }\n return domElement;\n}\nfunction wireEvents() {\n var resizers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < resizers.length; i++) {\n selectedHandler = resizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, this);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, this);\n }\n}\n/* istanbul ignore next */\nfunction getEventType(e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\nfunction onMouseDown(e) {\n e.preventDefault();\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.pageX;\n originalMouseY = e.pageY;\n e.target.classList.add(FOCUSED_HANDLER);\n if (!isNullOrUndefined(resizeStart)) {\n resizeStart(e);\n }\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.add(target, 'mousemove', onMouseMove, this);\n EventHandler.add(document, 'mouseup', onMouseUp, this);\n for (var i = 0; i < RESTRICT_LEFT.length; i++) {\n if (targetElement.classList.contains(RESTRICT_LEFT[i])) {\n setLeft = false;\n }\n else {\n setLeft = true;\n }\n }\n}\n/* istanbul ignore next */\nfunction onMouseUp(e) {\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.remove(target, 'mousemove', onMouseMove);\n EventHandler.remove(target, touchMoveEvent, onMouseMove);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.remove(target, eventName, onMouseMove);\n if (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n }\n if (!isNullOrUndefined(resizeEnd)) {\n resizeEnd(e);\n }\n EventHandler.remove(document, 'mouseup', onMouseUp);\n EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\nfunction calculateValues() {\n originalWidth = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('width').replace('px', ''));\n originalHeight = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('height').replace('px', ''));\n originalX = targetElement.getBoundingClientRect().left;\n originalY = targetElement.getBoundingClientRect().top;\n}\n/* istanbul ignore next */\nfunction onTouchStart(e) {\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.touches[0].pageX;\n originalMouseY = e.touches[0].pageY;\n if (!isNullOrUndefined(resizeStart)) {\n resizeStart(e);\n }\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.add(target, touchMoveEvent, onMouseMove, this);\n EventHandler.add(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\nfunction onMouseMove(e) {\n if (e.target.classList.contains(RESIZE_HANDLER) && e.target.classList.contains(FOCUSED_HANDLER)) {\n selectedHandler = e.target;\n }\n else if (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n }\n if (!isNullOrUndefined(selectedHandler)) {\n var resizeTowards = '';\n for (var i = 0; i < elementClass.length; i++) {\n if (selectedHandler.classList.contains('e-' + elementClass[i])) {\n resizeTowards = elementClass[i];\n }\n }\n if (!isNullOrUndefined(resize)) {\n resize(e);\n }\n switch (resizeTowards) {\n case 'south':\n resizeSouth(e);\n break;\n case 'north':\n resizeNorth(e);\n break;\n case 'west':\n resizeWest(e);\n break;\n case 'east':\n resizeEast(e);\n break;\n case 'south-east':\n resizeSouth(e);\n resizeEast(e);\n break;\n case 'south-west':\n resizeSouth(e);\n resizeWest(e);\n break;\n case 'north-east':\n resizeNorth(e);\n resizeEast(e);\n break;\n case 'north-west':\n resizeNorth(e);\n resizeWest(e);\n break;\n default: break;\n }\n }\n}\n/* istanbul ignore next */\nfunction getClientRectValues(element) {\n return element.getBoundingClientRect();\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeSouth(e) {\n var documentHeight = document.documentElement.clientHeight;\n var calculateValue = false;\n var containerRectValues;\n var currentpageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n if (!isNullOrUndefined(containerElement)) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && ((documentHeight - currentpageY) >= 0 || (targetRectValues.top < 0))) {\n calculateValue = true;\n }\n var calculatedHeight = originalHeight + (currentpageY - originalMouseY);\n calculatedHeight = (calculatedHeight > minHeight) ? calculatedHeight : minHeight;\n var containerTop = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerTop = containerRectValues.top;\n }\n var borderValue = isNullOrUndefined(containerElement) ? 0 : containerElement.offsetHeight - containerElement.clientHeight;\n var topWithoutborder = (targetRectValues.top - containerTop) - (borderValue / 2);\n topWithoutborder = (topWithoutborder < 0) ? 0 : topWithoutborder;\n if (targetRectValues.top > 0 && (topWithoutborder + calculatedHeight) > maxHeight) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.height = (maxHeight - parseInt(topWithoutborder.toString(), 10)) + 'px';\n return;\n }\n var targetTop = 0;\n if (calculateValue) {\n if (targetRectValues.top < 0 && (documentHeight + (targetRectValues.height + targetRectValues.top) > 0)) {\n targetTop = targetRectValues.top;\n if ((calculatedHeight + targetTop) <= 30) {\n calculatedHeight = (targetRectValues.height - (targetRectValues.height + targetRectValues.top)) + 30;\n }\n }\n if (((calculatedHeight + targetRectValues.top) >= maxHeight)) {\n targetElement.style.height = targetRectValues.height +\n (documentHeight - (targetRectValues.height + targetRectValues.top)) + 'px';\n }\n var calculatedTop = (isNullOrUndefined(containerElement)) ? targetTop : topWithoutborder;\n if (calculatedHeight >= minHeight && ((calculatedHeight + calculatedTop) <= maxHeight)) {\n targetElement.style.height = calculatedHeight + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeNorth(e) {\n var calculateValue = false;\n var boundaryRectValues;\n var pageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement)) {\n boundaryRectValues = getClientRectValues(containerElement);\n }\n if (!isNullOrUndefined(containerElement) && (targetRectValues.top - boundaryRectValues.top) > 0) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && pageY > 0) {\n calculateValue = true;\n }\n var currentHeight = originalHeight - (pageY - originalMouseY);\n if ((getClientRectValues(targetElement).bottom + currentHeight) > maxHeight) {\n calculateValue = false;\n targetElement.style.height = maxHeight - getClientRectValues(targetElement).bottom + 'px';\n }\n if (calculateValue) {\n if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n var containerTop = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerTop = boundaryRectValues.top;\n }\n var top_1 = (originalY - containerTop) + (pageY - originalMouseY);\n top_1 = top_1 > 0 ? top_1 : 1;\n targetElement.style.height = currentHeight + 'px';\n targetElement.style.top = top_1 + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeWest(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var rectValues;\n if (!isNullOrUndefined(containerElement)) {\n rectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n var borderValue = isNullOrUndefined(containerElement) ? 0 : containerElement.offsetWidth - containerElement.clientWidth;\n var left = isNullOrUndefined(containerElement) ? 0 : rectValues.left;\n var containerWidth = isNullOrUndefined(containerElement) ? 0 : rectValues.width;\n if (isNullOrUndefined(resizeWestWidth)) {\n if (!isNullOrUndefined(containerElement)) {\n resizeWestWidth = (((targetRectValues.left - left) - borderValue / 2)) + targetRectValues.width;\n resizeWestWidth = resizeWestWidth + (containerWidth - borderValue - resizeWestWidth);\n }\n else {\n resizeWestWidth = documentWidth;\n }\n }\n if (!isNullOrUndefined(containerElement) &&\n (((targetRectValues.left - rectValues.left) + targetRectValues.width +\n (rectValues.right - targetRectValues.right)) - borderValue) <= maxWidth) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && pageX >= 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth - (pageX - originalMouseX);\n if (setLeft) {\n calculatedWidth = (calculatedWidth > resizeWestWidth) ? resizeWestWidth : calculatedWidth;\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n var containerLeft = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerLeft = rectValues.left;\n }\n var left_1 = (originalX - containerLeft) + (pageX - originalMouseX);\n left_1 = (left_1 > 0) ? left_1 : 1;\n if (calculatedWidth !== previousWidth && setWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n if (setLeft) {\n targetElement.style.left = left_1 + 'px';\n if (left_1 === 1) {\n setWidth = false;\n }\n else {\n setWidth = true;\n }\n }\n }\n }\n previousWidth = calculatedWidth;\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeEast(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var containerRectValues;\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement) && (((targetRectValues.left - containerRectValues.left) + targetRectValues.width) < maxWidth\n || (targetRectValues.right - containerRectValues.left) > targetRectValues.width)) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && (documentWidth - pageX) > 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth + (pageX - originalMouseX);\n var containerLeft = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerLeft = containerRectValues.left;\n }\n if (((targetRectValues.left - containerLeft) + calculatedWidth) > maxWidth) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.width = maxWidth - (targetRectValues.left - containerLeft) + 'px';\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n }\n}\n/* istanbul ignore next */\nexport function setMinHeight(minimumHeight) {\n minHeight = minimumHeight;\n}\nexport function removeResize() {\n var handlers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < handlers.length; i++) {\n detach(handlers[i]);\n }\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIALSPIN);\n mat_calculate_attributes(radius, container, 'Material', CLS_MATERIALSPIN);\n}\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap4', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT4SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap4', CLS_BOOT4SPIN);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap4':\n createBootstrap4Spinner(innerContainer, radius, makeElement);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize;\n switch (theme) {\n case 'Material':\n defaultSize = DEFT_MAT_WIDTH;\n break;\n case 'Fabric':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Bootstrap4':\n defaultSize = DEFT_BOOT4_WIDTH;\n break;\n default:\n defaultSize = DEFT_BOOT_WIDTH;\n }\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', cls);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container, type, cls) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.' + cls);\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('d', drawArc(diameter, strokeSize));\n if (type === 'Material') {\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n }\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n}\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, getValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp) {\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n this.modelObserver.notify(eventName, eventProp);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n handler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n },\n \"islamic\": {\n \"months\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"1\": \"Muh.\",\n \"2\": \"Saf.\",\n \"3\": \"Rab. I\",\n \"4\": \"Rab. II\",\n \"5\": \"Jum. I\",\n \"6\": \"Jum. II\",\n \"7\": \"Raj.\",\n \"8\": \"Sha.\",\n \"9\": \"Ram.\",\n \"10\": \"Shaw.\",\n \"11\": \"Dhuʻl-Q.\",\n \"12\": \"Dhuʻl-H.\"\n },\n \"narrow\": {\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n \"10\": \"10\",\n \"11\": \"11\",\n \"12\": \"12\"\n },\n \"wide\": {\n \"1\": \"Muharram\",\n \"2\": \"Safar\",\n \"3\": \"Rabiʻ I\",\n \"4\": \"Rabiʻ II\",\n \"5\": \"Jumada I\",\n \"6\": \"Jumada II\",\n \"7\": \"Rajab\",\n \"8\": \"Shaʻban\",\n \"9\": \"Ramadan\",\n \"10\": \"Shawwal\",\n \"11\": \"Dhuʻl-Qiʻdah\",\n \"12\": \"Dhuʻl-Hijjah\"\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n \"eras\": {\n \"eraNames\": {\n \"0\": \"AH\"\n },\n \"eraAbbr\": {\n \"0\": \"AH\"\n },\n \"eraNarrow\": {\n \"0\": \"AH\"\n }\n },\n \"dateFormats\": {\n \"full\": \"EEEE, MMMM d, y G\",\n \"long\": \"MMMM d, y G\",\n \"medium\": \"MMM d, y G\",\n \"short\": \"M/d/y GGGGG\"\n },\n \"timeFormats\": {\n \"full\": \"h:mm:ss a zzzz\",\n \"long\": \"h:mm:ss a z\",\n \"medium\": \"h:mm:ss a\",\n \"short\": \"h:mm a\"\n },\n \"dateTimeFormats\": {\n \"full\": \"{1} 'at' {0}\",\n \"long\": \"{1} 'at' {0}\",\n \"medium\": \"{1}, {0}\",\n \"short\": \"{1}, {0}\",\n \"availableFormats\": {\n \"d\": \"d\",\n \"E\": \"ccc\",\n \"Ed\": \"d E\",\n \"Ehm\": \"E h:mm a\",\n \"EHm\": \"E HH:mm\",\n \"Ehms\": \"E h:mm:ss a\",\n \"EHms\": \"E HH:mm:ss\",\n \"Gy\": \"y G\",\n \"GyMMM\": \"MMM y G\",\n \"GyMMMd\": \"MMM d, y G\",\n \"GyMMMEd\": \"E, MMM d, y G\",\n \"h\": \"h a\",\n \"H\": \"HH\",\n \"hm\": \"h:mm a\",\n \"Hm\": \"HH:mm\",\n \"hms\": \"h:mm:ss a\",\n \"Hms\": \"HH:mm:ss\",\n \"M\": \"L\",\n \"Md\": \"M/d\",\n \"MEd\": \"E, M/d\",\n \"MMM\": \"LLL\",\n \"MMMd\": \"MMM d\",\n \"MMMEd\": \"E, MMM d\",\n \"MMMMd\": \"MMMM d\",\n \"ms\": \"mm:ss\",\n \"y\": \"y G\",\n \"yyyy\": \"y G\",\n \"yyyyM\": \"M/y GGGGG\",\n \"yyyyMd\": \"M/d/y GGGGG\",\n \"yyyyMEd\": \"E, M/d/y GGGGG\",\n \"yyyyMMM\": \"MMM y G\",\n \"yyyyMMMd\": \"MMM d, y G\",\n \"yyyyMMMEd\": \"E, MMM d, y G\",\n \"yyyyMMMM\": \"MMMM y G\",\n \"yyyyQQQ\": \"QQQ y G\",\n \"yyyyQQQQ\": \"QQQQ y G\"\n }\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic) {\n var resPattern;\n var iType = type || 'date';\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || IntlBase.defaultObject;\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n ret.dateObject = getValue('dates.calendars.' + calendartype, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode) {\n return getValue('currencies.' + currencyCode + '.symbol', numericObject) || '$';\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n})(IntlBase || (IntlBase = {}));\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","/***\n * Hijri parser\n */\nexport var HijriParser;\n(function (HijriParser) {\n /* tslint:disable */\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,\n 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,\n 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,\n 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,\n 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,\n 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,\n 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,\n 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,\n 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,\n 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,\n 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,\n 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,\n 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,\n 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,\n 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,\n 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,\n 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,\n 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,\n 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,\n 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,\n 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,\n 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,\n 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,\n 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,\n 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,\n 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,\n 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,\n 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,\n 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,\n 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,\n 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,\n 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,\n 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,\n 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,\n 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,\n 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,\n 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,\n 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,\n 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,\n 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,\n 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,\n 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,\n 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,\n 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,\n 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,\n 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,\n 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,\n 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,\n 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,\n 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,\n 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,\n 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,\n 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,\n 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,\n 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,\n 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,\n 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,\n 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,\n 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,\n 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,\n 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,\n 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,\n 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,\n 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,\n 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,\n 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,\n 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,\n 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,\n 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,\n 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,\n 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,\n 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,\n 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,\n 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,\n 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,\n 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,\n 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,\n 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,\n 79990];\n /* tslint:enable */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[i] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|ccc|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else {\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\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 { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n /**\n * This is a instance method to create an element.\n * @private\n */\n _this.createElement = createElement;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n //tslint:disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\n var parseOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {} };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n var numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n/* tslint:enable */\n","import { extend, isNullOrUndefined } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n /* tslint:disable no-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left + window.scrollX > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.scrollX < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top + window.scrollY > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.scrollY < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = elementArea.width ? elementArea.width : elementArea.right - elementArea.left;\n eleHeightBound = elementArea.height ? elementArea.height : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = top + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.display || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.display = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.display = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n Draggable.prototype.getMousePosition = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.scrollX) - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.scrollY) - this.relativeYPosition;\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\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, Collection, L10n, Browser, Complex, compile, createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createResize, removeResize, setMinHeight } from '../common/resize';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property('Button')\n ], ButtonProps.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\nvar DLG_RESIZABLE = 'e-dlg-resizable';\nvar DLG_RESTRICT_LEFT_VALUE = 'e-restrict-left';\nvar DLG_RESTRICT_WIDTH_VALUE = 'e-resize-viewport';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n if (this.enableResize) {\n this.setResize();\n if (this.animationSettings.effect === 'None') {\n this.getMinHeight();\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n this.allowMaxHeight = true;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n this.checkPositionData();\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n ;\n Dialog.prototype.isNumberValue = function (value) {\n var isNumber = /^[-+]?\\d*\\.?\\d+$/.test(value);\n return isNumber;\n };\n Dialog.prototype.checkPositionData = function () {\n if (!isNullOrUndefined(this.position)) {\n if (!isNullOrUndefined(this.position.X) && (typeof (this.position.X) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.X);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.X = parseFloat(this.position.X);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n if (!isNullOrUndefined(this.position.Y) && (typeof (this.position.Y) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.Y);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.Y = parseFloat(this.position.Y);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n }\n };\n /* istanbul ignore next */\n Dialog.prototype.getMinHeight = function () {\n var computedHeaderHeight = '0px';\n var computedFooterHeight = '0px';\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_HEADER_CONTENT))) {\n computedHeaderHeight = getComputedStyle(this.headerContent).height;\n }\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_FOOTER_CONTENT))) {\n computedFooterHeight = getComputedStyle(this.element.querySelector('.' + DLG_FOOTER_CONTENT)).height;\n }\n var headerHeight = parseInt(computedHeaderHeight.slice(0, computedHeaderHeight.indexOf('p')), 10);\n var footerHeight = parseInt(computedFooterHeight.slice(0, computedFooterHeight.indexOf('p')), 10);\n setMinHeight(headerHeight + 30 + footerHeight);\n };\n Dialog.prototype.onResizeStart = function (args) {\n this.trigger('resizeStart', args);\n };\n Dialog.prototype.onResizing = function (args) {\n this.trigger('resizing', args);\n };\n Dialog.prototype.onResizeComplete = function (args) {\n this.trigger('resizeStop', args);\n };\n Dialog.prototype.setResize = function () {\n if (this.enableResize) {\n this.element.classList.add(DLG_RESIZABLE);\n var computedHeight = getComputedStyle(this.element).minHeight;\n var computedWidth = getComputedStyle(this.element).minWidth;\n var direction = this.enableRtl ? 'south-west' : 'south-east';\n if (this.isModal && this.enableRtl) {\n this.element.classList.add(DLG_RESTRICT_LEFT_VALUE);\n }\n else if (this.isModal && this.target === document.body) {\n this.element.classList.add(DLG_RESTRICT_WIDTH_VALUE);\n }\n createResize({\n element: this.element,\n direction: direction,\n minHeight: parseInt(computedHeight.slice(0, computedWidth.indexOf('p')), 10),\n maxHeight: this.targetEle.clientHeight,\n minWidth: parseInt(computedWidth.slice(0, computedWidth.indexOf('p')), 10),\n maxWidth: this.targetEle.clientWidth,\n boundary: this.target === document.body ? null : this.targetEle,\n resizeBegin: this.onResizeStart.bind(this),\n resizeComplete: this.onResizeComplete.bind(this),\n resizing: this.onResizing.bind(this)\n });\n }\n else {\n removeResize();\n if (this.isModal) {\n this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n }\n else {\n this.element.classList.remove(DLG_RESTRICT_WIDTH_VALUE);\n }\n this.element.classList.remove(DLG_RESIZABLE);\n }\n };\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide(event);\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function (event) {\n _this.focusContent();\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target\n };\n if (_this.enableResize) {\n _this.getMinHeight();\n }\n _this.trigger('open', eventArgs);\n },\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n if (!isNullOrUndefined(document.activeElement.blur)) {\n document.activeElement.blur();\n }\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n document.activeElement.blur();\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (typeof (this.position.X) === 'number' && typeof (this.position.Y) === 'number') {\n this.setPopupPosition();\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n _this.element.style.position = 'relative';\n }\n _this.trigger('dragStop', event);\n _this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n };\n Dialog.prototype.setButton = function () {\n this.buttonContent = [];\n this.btnObj = [];\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var buttonType = !isNullOrUndefined(this.buttons[i].type) ? this.buttons[i].type.toLowerCase() : 'button';\n var btn = this.createElement('button', { attrs: { type: buttonType } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n for (var i = 0; i < this.buttons.length; i++) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click, this);\n }\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n this.btnObj[i].element.classList.add('e-flat');\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string') {\n this.contentEle.innerHTML = this.content;\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle);\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement) {\n var templateFn = compile(template);\n var fromElements = [];\n for (var _i = 0, _a = templateFn({}); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n };\n Dialog.prototype.setMaxHeight = function () {\n if (!this.allowMaxHeight) {\n return;\n }\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) && (this.targetEle.offsetHeight < window.innerHeight) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n };\n Dialog.prototype.setEnableRTL = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n if (!isNullOrUndefined(this.element.querySelector('.e-resize-handle'))) {\n removeResize();\n this.setResize();\n }\n };\n Dialog.prototype.setTargetContent = function () {\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n this.innerContentElement.appendChild(this.element.childNodes[0]);\n }\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle);\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent);\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n this.setHeader();\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n this.setFooterTemplate();\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n this.calculatezIndex = false;\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons':\n var buttonCount = this.buttons.length;\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n for (var i = 0; i < buttonCount; i++) {\n if (!isNullOrUndefined(this.buttons[i].buttonModel)) {\n this.footerTemplate = '';\n this.setButton();\n }\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n this.checkPositionData();\n if (this.isModal) {\n var positionX = isNullOrUndefined(oldProp.position.X) ? this.position.X : oldProp.position.X;\n var positionY = isNullOrUndefined(oldProp.position.Y) ? this.position.Y : oldProp.position.Y;\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'enableResize':\n this.setResize();\n break;\n }\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.zIndex = getZindexPartial(zIndexElement);\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target,\n maxHeight: this.element.style.maxHeight\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.element.style.maxHeight !== eventArgs.maxHeight) {\n this.allowMaxHeight = false;\n this.element.style.maxHeight = eventArgs.maxHeight;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n removeClass([this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n var zIndexElement = (this.isModal) ? this.element.parentElement : this.element;\n if (this.calculatezIndex) {\n this.setzIndex(zIndexElement, true);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n }\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = true;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {void}\n */\n Dialog.prototype.hide = function (event) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n isInteraction: event ? true : false,\n isInteracted: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n };\n this.trigger('beforeClose', eventArgs);\n this.closeArgs = eventArgs;\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = false;\n this.isProtectedOnChange = prevOnChange;\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n * @param { number } index - Index of the button.\n * @return {Button}\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enableResize\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStop\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n function alert(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(alertDialogObj);\n }\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n function confirm(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(confirmDialogObj);\n }\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : DLG_UTIL_DEFAULT_TITLE;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n options.animationSettings = !isNullOrUndefined(option.animationSettings) ? option.animationSettings :\n { effect: 'Fade', duration: 400, delay: 0 };\n options.cssClass = !isNullOrUndefined(option.cssClass) ? option.cssClass : '';\n options.zIndex = !isNullOrUndefined(option.zIndex) ? option.zIndex : 1000;\n options.open = !isNullOrUndefined(option.open) ? option.open : null;\n return options;\n }\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\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 { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n /* tslint:disable no-any */\n return this.currentLocale[prop] || this.localeStrings[prop] || '';\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if (curObject[locale]) {\n return curObject[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\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 { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n * @private\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = (evt.changedTouches ? evt.changedTouches[0] : evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\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 { Property, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n this.removeRippleEffect();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n * @private\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ButtonModel} newProp\n * @param {ButtonModel} oldProp\n * @returns void\n * @private\n */\n Button.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 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n this.unWireEvents();\n break;\n case 'iconCss':\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n if (newProp.iconCss) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n detach(span);\n }\n }\n else {\n this.setIconCss();\n }\n break;\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\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, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n _this.isMouseClick = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n if (this.isMouseClick) {\n this.focusOutHandler();\n this.isMouseClick = false;\n }\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n };\n CheckBox.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n CheckBox.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n this.isFocused = false;\n };\n /**\n * Gets the module name.\n * @private\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n return this.element.parentElement.parentElement;\n };\n CheckBox.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState('check');\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n setHiddenInput(this, label);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering.\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n attributes(this.element, { 'checked': this.initialCheckedValue.toString() });\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseHandler, this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\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, rippleEffect, NotifyPropertyChanges, Property, closest } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n if (this.tagName === 'EJS-RADIOBUTTON') {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function (state) {\n var input;\n var instance;\n var name = this.element.getAttribute('name');\n var radioGrp = document.querySelectorAll('input.e-radio[name=\"' + name + '\"]');\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n instance = getInstance(input, RadioButton_1);\n instance.checked = false;\n if (this.tagName === 'EJS-RADIOBUTTON') {\n instance.angularValue = this.value;\n }\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.element.parentElement;\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n }\n };\n RadioButton.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.focusOutHandler = function () {\n this.getLabel().classList.remove('e-focus');\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getLabel = function () {\n return this.element.nextElementSibling;\n };\n RadioButton.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n this.initWrapper();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n RadioButton.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n if (this.initialCheckedValue) {\n attributes(this.element, { 'checked': 'true' });\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([label], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n * @private\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n if (this.tagName === 'EJS-RADIOBUTTON') {\n var formControlName = this.element.getAttribute('formcontrolname');\n if (formControlName) {\n this.setProperties({ 'name': formControlName }, true);\n this.element.setAttribute('name', formControlName);\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\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, NotifyPropertyChanges, Property, closest } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, isRippleEnabled, removeClass, rippleEffect, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { rippleMouseHandler, destroy, preRender, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-switch-disabled';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLE_CHECK = 'e-ripple-check';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-switch-wrapper';\nvar ACTIVE = 'e-switch-active';\n/**\n * The Switch is a graphical user interface element that allows you to toggle between checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function Switch(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n _this.isDrag = false;\n return _this;\n }\n Switch.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var wrapper = this.getWrapper();\n var bar = wrapper.querySelector('.e-switch-inner');\n var handle = wrapper.querySelector('.e-switch-handle');\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n if (state) {\n addClass([bar, handle], ACTIVE);\n ariaState = 'true';\n this.element.checked = true;\n this.checked = true;\n if (rippleSpan) {\n addClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n else {\n removeClass([bar, handle], ACTIVE);\n ariaState = 'false';\n this.element.checked = false;\n this.checked = false;\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n wrapper.setAttribute('aria-checked', ariaState);\n };\n Switch.prototype.clickHandler = function (evt) {\n this.isDrag = false;\n this.focusOutHandler();\n this.changeState(!this.checked);\n this.element.focus();\n var changeEventArgs = { checked: this.element.checked, event: evt };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the Switch widget.\n * @returns void\n */\n Switch.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n destroy(this, this.getWrapper(), this.tagName);\n };\n Switch.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n Switch.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n Switch.prototype.getModuleName = function () {\n return 'switch';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n Switch.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n Switch.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n Switch.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialSwitchCheckedValue)) {\n this.initialSwitchCheckedValue = this.checked;\n }\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState(true);\n }\n if (this.disabled) {\n this.setDisabled();\n }\n if (this.onLabel || this.offLabel) {\n this.setLabel(this.onLabel, this.offLabel);\n }\n };\n Switch.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'switch', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var switchInner = this.createElement('span', { className: 'e-switch-inner' });\n var onLabel = this.createElement('span', { className: 'e-switch-on' });\n var offLabel = this.createElement('span', { className: 'e-switch-off' });\n var handle = this.createElement('span', { className: 'e-switch-handle' });\n wrapper.appendChild(this.element);\n setHiddenInput(this, wrapper);\n switchInner.appendChild(onLabel);\n switchInner.appendChild(offLabel);\n wrapper.appendChild(switchInner);\n wrapper.appendChild(handle);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n handle.appendChild(rippleSpan);\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n Switch.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.changeState(newProp.checked);\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'onLabel':\n case 'offLabel':\n this.setLabel(newProp.onLabel, newProp.offLabel);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n Switch.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n preRender(this, 'EJS-SWITCH', WRAPPER, element, this.getModuleName());\n };\n /**\n * Initialize control rendering.\n * @private\n */\n Switch.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n Switch.prototype.rippleHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n if (e.type === 'mousedown' && e.currentTarget.classList.contains('e-switch-wrapper') && e.which === 1) {\n this.isDrag = true;\n this.isKeyPressed = false;\n }\n };\n Switch.prototype.rippleTouchHandler = function (eventType) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(eventType, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n };\n Switch.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n Switch.prototype.setLabel = function (onText, offText) {\n var wrapper = this.getWrapper();\n if (onText) {\n wrapper.querySelector('.e-switch-on').textContent = onText;\n }\n if (offText) {\n wrapper.querySelector('.e-switch-off').textContent = offText;\n }\n };\n Switch.prototype.switchFocusHandler = function () {\n this.isKeyPressed = true;\n };\n Switch.prototype.switchMouseUp = function (e) {\n var target = e.target;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n if (e.type === 'touchstart') {\n this.isDrag = true;\n this.rippleTouchHandler('mousedown');\n }\n if (this.isDrag) {\n if ((e.type === 'mouseup' && target.className.indexOf('e-switch') < 0) || e.type === 'touchend') {\n this.clickHandler(e);\n this.rippleTouchHandler('mouseup');\n e.preventDefault();\n }\n }\n };\n Switch.prototype.formResetHandler = function () {\n this.checked = this.initialSwitchCheckedValue;\n attributes(this.element, { 'checked': this.initialSwitchCheckedValue.toString() });\n };\n /**\n * Toggle the Switch component state into checked/unchecked.\n * @returns void\n */\n Switch.prototype.toggle = function () {\n this.clickHandler();\n };\n Switch.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n this.delegateMouseUpHandler = this.switchMouseUp.bind(this);\n this.delegateKeyDownHandler = this.switchFocusHandler.bind(this);\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(document, 'mouseup', this.delegateMouseUpHandler, this);\n EventHandler.add(document, 'keydown', this.delegateKeyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown mouseup', this.rippleHandler, this);\n EventHandler.add(wrapper, 'touchstart touchmove touchend', this.switchMouseUp, this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n };\n Switch.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(document, 'mouseup', this.delegateMouseUpHandler);\n EventHandler.remove(document, 'keydown', this.delegateKeyDownHandler);\n EventHandler.remove(wrapper, 'mousedown mouseup', this.rippleHandler);\n EventHandler.remove(wrapper, 'touchstart touchmove touchend', this.switchMouseUp);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n __decorate([\n Event()\n ], Switch.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Switch.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"onLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"offLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"value\", void 0);\n Switch = __decorate([\n NotifyPropertyChanges\n ], Switch);\n return Switch;\n}(Component));\nexport { Switch };\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, NotifyPropertyChanges, Property, append, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { EventHandler, detach, Event, addClass } from '@syncfusion/ej2-base';\nexport var classNames = {\n chipSet: 'e-chip-set',\n chip: 'e-chip',\n avatar: 'e-chip-avatar',\n text: 'e-chip-text',\n icon: 'e-chip-icon',\n delete: 'e-chip-delete',\n deleteIcon: 'e-dlt-btn',\n multiSelection: 'e-multi-selection',\n singleSelection: 'e-selection',\n active: 'e-active',\n chipWrapper: 'e-chip-avatar-wrap',\n iconWrapper: 'e-chip-icon-wrap',\n focused: 'e-focused',\n disabled: 'e-disabled',\n rtl: 'e-rtl',\n};\n/**\n * A chip component is a small block of essential information, mostly used on contacts or filter tags.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar ChipList = /** @class */ (function (_super) {\n __extends(ChipList, _super);\n function ChipList(options, element) {\n return _super.call(this, options, element) || this;\n }\n ChipList.prototype.preRender = function () {\n //prerender\n };\n ChipList.prototype.render = function () {\n this.type = this.chips.length ? 'chipset' : (this.text || this.element.innerText ? 'chip' : 'chipset');\n this.setAttributes();\n this.createChip();\n this.setRtl();\n this.wireEvent(false);\n this.select(this.selectedChips);\n this.rippleFunctin = rippleEffect(this.element, {\n selector: '.e-chip'\n });\n };\n ChipList.prototype.createChip = function () {\n this.innerText = this.element.innerText.trim();\n this.element.innerHTML = '';\n this.chipCreation(this.type === 'chip' ? [this.innerText ? this.innerText : this.text] : this.chips);\n };\n ChipList.prototype.setAttributes = function () {\n if (this.type === 'chip') {\n this.element.tabIndex = 0;\n this.element.setAttribute('role', 'option');\n }\n else {\n this.element.classList.add(classNames.chipSet);\n this.element.setAttribute('role', 'listbox');\n if (this.selection === 'Multiple') {\n this.element.classList.add(classNames.multiSelection);\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n else if (this.selection === 'Single') {\n this.element.classList.add(classNames.singleSelection);\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n }\n };\n ChipList.prototype.setRtl = function () {\n this.element.classList[this.enableRtl ? 'add' : 'remove'](classNames.rtl);\n };\n ChipList.prototype.chipCreation = function (data) {\n var chipListArray = [];\n for (var i = 0; i < data.length; i++) {\n var fieldsData = this.getFieldValues(data[i]);\n var chipArray = this.elementCreation(fieldsData);\n var className = (classNames.chip + ' ' + (fieldsData.enabled ? ' ' : classNames.disabled) + ' ' +\n (fieldsData.avatarIconCss || fieldsData.avatarText ? classNames.chipWrapper : (fieldsData.leadingIconCss ?\n classNames.iconWrapper : ' ')) + ' ' + fieldsData.cssClass).split(' ').filter(function (css) { return css; });\n if (this.type === 'chip') {\n chipListArray = chipArray;\n addClass([this.element], className);\n this.element.setAttribute('aria-label', fieldsData.text);\n }\n else {\n var wrapper = this.createElement('DIV', {\n className: className.join(' '), attrs: {\n tabIndex: '0', role: 'option',\n 'aria-label': fieldsData.text, 'aria-selected': 'false'\n }\n });\n append(chipArray, wrapper);\n chipListArray.push(wrapper);\n }\n }\n append(chipListArray, this.element);\n };\n ChipList.prototype.getFieldValues = function (data) {\n var chipEnabled = this.enabled.toString() === 'false' ? false : true;\n var fields = {\n text: typeof data === 'object' ? (data.text ? data.text.toString() : this.text.toString()) :\n (this.type === 'chip' ? (this.innerText ? this.innerText : this.text.toString()) : data.toString()),\n cssClass: typeof data === 'object' ? (data.cssClass ? data.cssClass.toString() : this.cssClass.toString()) :\n (this.cssClass.toString()),\n leadingIconCss: typeof data === 'object' ? (data.leadingIconCss ? data.leadingIconCss.toString() :\n this.leadingIconCss.toString()) : (this.leadingIconCss.toString()),\n avatarIconCss: typeof data === 'object' ? (data.avatarIconCss ? data.avatarIconCss.toString() :\n this.avatarIconCss.toString()) : (this.avatarIconCss.toString()),\n avatarText: typeof data === 'object' ? (data.avatarText ? data.avatarText.toString() : this.avatarText.toString()) :\n (this.avatarText.toString()),\n trailingIconCss: typeof data === 'object' ? (data.trailingIconCss ? data.trailingIconCss.toString() :\n this.trailingIconCss.toString()) : (this.trailingIconCss.toString()),\n enabled: typeof data === 'object' ? (!isNullOrUndefined(data.enabled) ? (data.enabled.toString() === 'false' ? false : true) :\n chipEnabled) : (chipEnabled)\n };\n return fields;\n };\n ChipList.prototype.elementCreation = function (fields) {\n var chipArray = [];\n if (fields.avatarText || fields.avatarIconCss) {\n var className = (classNames.avatar + ' ' + fields.avatarIconCss).trim();\n var chipAvatarElement = this.createElement('span', { className: className });\n chipAvatarElement.innerText = fields.avatarText;\n chipArray.push(chipAvatarElement);\n }\n else if (fields.leadingIconCss) {\n var className = (classNames.icon + ' ' + fields.leadingIconCss).trim();\n var chipIconElement = this.createElement('span', { className: className });\n chipArray.push(chipIconElement);\n }\n var chipTextElement = this.createElement('span', { className: classNames.text });\n chipTextElement.innerText = fields.text;\n chipArray.push(chipTextElement);\n if (fields.trailingIconCss || (this.type !== 'chip' && this.enableDelete)) {\n var className = (classNames.delete + ' ' +\n (fields.trailingIconCss ? fields.trailingIconCss : classNames.deleteIcon)).trim();\n var chipdeleteElement = this.createElement('span', { className: className });\n chipArray.push(chipdeleteElement);\n }\n return chipArray;\n };\n /**\n * A function that finds chip based on given input.\n * @param {number | HTMLElement } fields - We can pass index number or element of chip.\n */\n ChipList.prototype.find = function (fields) {\n var chipData;\n var chipElement = fields instanceof HTMLElement ?\n fields : this.element.querySelectorAll('.' + classNames.chip)[fields];\n if (chipElement && this.type !== 'chip') {\n chipData = { text: undefined, index: undefined, element: undefined, data: undefined };\n chipData.index = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.chip)).indexOf(chipElement);\n chipData.text = typeof this.chips[chipData.index] === 'object' ?\n (this.chips[chipData.index].text ?\n this.chips[chipData.index].text.toString() : '') :\n this.chips[chipData.index].toString();\n chipData.data = this.chips[chipData.index];\n chipData.element = chipElement;\n }\n return chipData;\n };\n /**\n * A function that adds chip items based on given input.\n * @param {string[] | number[] | ChipModel[] | string | number | ChipModel} chipsData - We can pass array of string or\n * array of number or array of chip model or string data or number data or chip model.\n */\n ChipList.prototype.add = function (chipsData) {\n var _a;\n if (this.type !== 'chip') {\n var fieldData = chipsData instanceof Array ?\n chipsData : [chipsData];\n (_a = this.chips).push.apply(_a, fieldData);\n this.chipCreation(fieldData);\n }\n };\n /**\n * A function that selects chip items based on given input.\n * @param {number | number[] | HTMLElement | HTMLElement[]} fields - We can pass number or array of number\n * or chip element or array of chip element.\n */\n ChipList.prototype.select = function (fields) {\n if (this.type !== 'chip' && this.selection !== 'None') {\n var fieldData = fields instanceof Array ? fields : [fields];\n for (var i = 0; i < fieldData.length; i++) {\n var chipElement = fieldData[i] instanceof HTMLElement ? fieldData[i]\n : this.element.querySelectorAll('.' + classNames.chip)[fieldData[i]];\n if (chipElement instanceof HTMLElement) {\n this.selectionHandler(chipElement);\n }\n }\n }\n };\n /**\n * A function that removes chip items based on given input.\n * @param {number | number[] | HTMLElement | HTMLElement[]} fields - We can pass number or array of number\n * or chip element or array of chip element.\n */\n ChipList.prototype.remove = function (fields) {\n var _this = this;\n if (this.type !== 'chip') {\n var fieldData = fields instanceof Array ? fields : [fields];\n var chipElements_1 = [];\n var chipCollection_1 = this.element.querySelectorAll('.' + classNames.chip);\n fieldData.forEach(function (data) {\n var chipElement = data instanceof HTMLElement ? data\n : chipCollection_1[data];\n if (chipElement instanceof HTMLElement) {\n chipElements_1.push(chipElement);\n }\n });\n chipElements_1.forEach(function (element) {\n var chips = _this.element.querySelectorAll('.' + classNames.chip);\n var index = Array.prototype.slice.call(chips).indexOf(element);\n _this.deleteHandler(element, index);\n });\n }\n };\n /**\n * A function that returns selected chips data.\n */\n ChipList.prototype.getSelectedChips = function () {\n var _this = this;\n var slectedChips;\n if (this.type !== 'chip' && this.selection !== 'None') {\n var selectedItems_1 = { texts: [], Indexes: [], data: [], elements: [] };\n this.element.querySelectorAll('.' + classNames.active).forEach(function (chip) {\n selectedItems_1.elements.push(chip);\n var index = Array.prototype.slice.call(_this.element.querySelectorAll('.' + classNames.chip)).indexOf(chip);\n selectedItems_1.Indexes.push(index);\n selectedItems_1.data.push(_this.chips[index]);\n var text = typeof _this.chips[index] === 'object' ?\n _this.chips[index].text.toString() : _this.chips[index].toString();\n selectedItems_1.texts.push(text);\n });\n var selectedItem = {\n text: selectedItems_1.texts[0], index: selectedItems_1.Indexes[0],\n data: selectedItems_1.data[0], element: selectedItems_1.elements[0]\n };\n slectedChips = !isNullOrUndefined(selectedItem.index) ?\n (this.selection === 'Multiple' ? selectedItems_1 : selectedItem) : undefined;\n }\n return slectedChips;\n };\n ChipList.prototype.wireEvent = function (unWireEvent) {\n if (!unWireEvent) {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'keydown', this.keyHandler);\n EventHandler.remove(this.element, 'keyup', this.keyHandler);\n }\n };\n ChipList.prototype.keyHandler = function (e) {\n if (e.target.classList.contains(classNames.chip)) {\n if (e.type === 'keydown') {\n if (e.keyCode === 13) {\n this.clickHandler(e);\n }\n else if (e.keyCode === 46 && this.enableDelete) {\n this.clickHandler(e, true);\n }\n }\n else if (e.keyCode === 9) {\n this.focusInHandler(e.target);\n }\n }\n };\n ChipList.prototype.focusInHandler = function (chipWrapper) {\n if (!chipWrapper.classList.contains(classNames.focused)) {\n chipWrapper.classList.add(classNames.focused);\n }\n };\n ChipList.prototype.focusOutHandler = function (e) {\n var chipWrapper = closest(e.target, '.' + classNames.chip);\n var focusedElement = this.type === 'chip' ? (this.element.classList.contains(classNames.focused) ?\n this.element : null) : this.element.querySelector('.' + classNames.focused);\n if (chipWrapper && focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n }\n };\n ChipList.prototype.clickHandler = function (e, del) {\n if (del === void 0) { del = false; }\n var chipWrapper = closest(e.target, '.' + classNames.chip);\n if (chipWrapper) {\n if (this.type !== 'chip') {\n var chipData = this.find(chipWrapper);\n chipData.event = e;\n var deleteElement = e.target.classList.contains(classNames.delete) ?\n e.target : (del ? chipWrapper.querySelector('.' + classNames.delete) : undefined);\n if (deleteElement && this.enableDelete) {\n chipData.cancel = false;\n var deletedItemArgs = chipData;\n this.trigger('delete', deletedItemArgs);\n if (!deletedItemArgs.cancel) {\n this.deleteHandler(chipData.element, chipData.index);\n }\n }\n else if (this.selection !== 'None') {\n this.selectionHandler(chipWrapper);\n chipData.selected = chipWrapper.classList.contains(classNames.active);\n var selectedItemArgs = chipData;\n this.trigger('click', selectedItemArgs);\n }\n else {\n this.focusInHandler(chipWrapper);\n var clickedItemArgs = chipData;\n this.trigger('click', clickedItemArgs);\n }\n }\n else {\n this.focusInHandler(chipWrapper);\n var clickedItemArgs = {\n text: this.innerText ? this.innerText : this.text,\n element: chipWrapper, data: this.text, event: e\n };\n this.trigger('click', clickedItemArgs);\n }\n }\n };\n ChipList.prototype.selectionHandler = function (chipWrapper) {\n if (this.selection === 'Single') {\n var activeElement = this.element.querySelector('.' + classNames.active);\n if (activeElement && activeElement !== chipWrapper) {\n activeElement.classList.remove(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'false');\n }\n }\n if (chipWrapper.classList.contains(classNames.active)) {\n chipWrapper.classList.remove(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'false');\n }\n else {\n chipWrapper.classList.add(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'true');\n }\n };\n ChipList.prototype.deleteHandler = function (chipWrapper, index) {\n this.chips.splice(index, 1);\n detach(chipWrapper);\n };\n /**\n * It is used to destroy the ChipList component.\n */\n ChipList.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [classNames.chipSet, classNames.chip, classNames.rtl,\n classNames.multiSelection, classNames.singleSelection, classNames.disabled, classNames.chipWrapper, classNames.iconWrapper,\n classNames.active, classNames.focused].concat(this.cssClass.toString().split(' ').filter(function (css) { return css; })));\n this.removeMultipleAttributes(['tabindex', 'role', 'aria-label', 'aria-multiselectable'], this.element);\n this.wireEvent(true);\n this.rippleFunctin();\n this.element.innerHTML = '';\n this.element.innerText = this.innerText;\n };\n ChipList.prototype.removeMultipleAttributes = function (attributes, element) {\n attributes.forEach(function (attr) {\n element.removeAttribute(attr);\n });\n };\n ChipList.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ChipList.prototype.getModuleName = function () {\n return 'chip-list';\n };\n ChipList.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 'chips':\n case 'text':\n case 'avatarText':\n case 'avatarIconCss':\n case 'leadingIconCss':\n case 'trailingIconCss':\n case 'selection':\n case 'enableDelete':\n case 'enabled':\n this.refresh();\n break;\n case 'cssClass':\n if (this.type === 'chip') {\n removeClass([this.element], oldProp.cssClass.toString().split(' ').filter(function (css) { return css; }));\n addClass([this.element], newProp.cssClass.toString().split(' ').filter(function (css) { return css; }));\n }\n else {\n this.refresh();\n }\n break;\n case 'selectedChips':\n this.select(newProp.selectedChips);\n break;\n case 'enableRtl':\n this.setRtl();\n break;\n }\n }\n };\n __decorate([\n Property([])\n ], ChipList.prototype, \"chips\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"avatarText\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"avatarIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"leadingIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"trailingIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], ChipList.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], ChipList.prototype, \"selectedChips\", void 0);\n __decorate([\n Property('None')\n ], ChipList.prototype, \"selection\", void 0);\n __decorate([\n Property(false)\n ], ChipList.prototype, \"enableDelete\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"delete\", void 0);\n ChipList = __decorate([\n NotifyPropertyChanges\n ], ChipList);\n return ChipList;\n}(Component));\nexport { ChipList };\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, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.tooltipEle.classList.remove(POPUP_LIB);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n append(templateFunction(), tooltipContent);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(this.createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation, target);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation, target);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, elePos.horizontal, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n offsetPos.top -= (('TopBottom'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n ('TopBottom'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetY) : 0;\n offsetPos.left -= (('RightLeft'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n ('RightLeft'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * this.offsetX) : 0;\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n return target;\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\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 if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n this.unwireMouseEvents(this.element);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\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 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 FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\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 return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\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 this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\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.cloneElement = this.element.cloneNode(true);\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'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\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 // tslint:disable-next-line\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n 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 };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\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 this.uploadButton.focus();\n this.wireActionButtonEvents();\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 = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\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 (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\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.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 if (this.cssClass) {\n addClass([this.uploadWrapper], this.cssClass.split(this.cssClass.indexOf(',') > -1 ? ',' : ' '));\n }\n if (oldCSSClass) {\n removeClass([this.uploadWrapper], oldCSSClass.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 this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n if (this.browserName === 'chrome') {\n this.element.files = e.dataTransfer.files;\n }\n else {\n this.onSelectFiles(e);\n }\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.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 fileData = this.filesData[index];\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON)) {\n fileData.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 {\n this.remove(fileData, false, false, 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 name = this.element.getAttribute('name');\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n var liElement = this.getLiElement(file);\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs);\n }\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n e.cancel = true;\n return;\n }\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = void 0;\n spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ? liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\n ajax.send(formData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // tslint:disable-next-line\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = 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('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 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 var statusElement = rootElement.querySelector('.' + STATUS);\n rootElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items;\n items = this.multiple ? event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_2 = function (i) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n // tslint:disable-next-line\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_2(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; i < items.length; i++) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n var _this = this;\n if (typeof (item) === 'boolean') {\n var files_3 = [];\n var _loop_3 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n var path = _this.filesEntries[i].fullPath;\n files_3.push({ 'path': path, 'file': fileObj });\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_3(i);\n }\n this.renderSelectedFiles(event, files_3, true);\n }\n else if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n // tslint:disable-next-line\n var directoryReader = item.createReader();\n // tslint:disable-next-line\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i]);\n // tslint:disable-next-line\n }\n ;\n _this.traverseFileTree(true);\n _this.filesEntries = [];\n });\n }\n };\n // tslint:enable\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n Uploader.prototype.renderSelectedFiles = function (args, \n // tslint:disable-next-line\n targetFiles, directory, paste) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false\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 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 };\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 this.checkActionComplete(true);\n }\n fileData.push(fileDetails);\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);\n this.selectedFiles = fileData;\n if (eventArgs.cancel) {\n return;\n }\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\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);\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 };\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.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 liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var fromElements = [].slice.call(this.uploadTemplateFn(listItem));\n var index = fileData.indexOf(listItem);\n append(fromElements, liElement);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons', 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 }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text;\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.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 (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 };\n this.trigger('canceling', 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 return;\n }\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 var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) { _this.removecanceledFile(e, files); return {}; };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n liElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement, false); }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_RETRY);\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n // tslint:disable-next-line\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\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 this.trigger('success', args);\n // tslint:disable-next-line\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 Uploader.prototype.uploadFailed = function (e, file) {\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);\n // tslint:disable-next-line\n this.updateStatus(file, args.statusText, '0');\n this.checkActionButtonStatus();\n this.uploadSequential();\n this.checkActionComplete(true);\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n increment ? ++this.actionCompleteCount : --this.actionCompleteCount;\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () { _this.animateProgressBar(li, callType); }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom) {\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);\n };\n Uploader.prototype.sendRequest = function (file, metaData, custom) {\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('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n 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);\n }\n _this.trigger('chunkUploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n _this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n var liElement = this.getLiElement(eventArgs.fileData);\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + REMOVE_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n this.checkActionButtonStatus();\n };\n 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 };\n this.trigger('canceling', eventArgs_1);\n /* istanbul ignore next */\n if (eventArgs_1.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 return;\n }\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 var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) { _this.removeChunkFile(e, metaData, custom); return {}; };\n ajax.send(formData);\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs);\n // To prevent triggering of failure event\n // tslint:disable-next-line\n if (!eventArgs.cancel) {\n if (metaData.retryCount < this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON);\n 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 = metaData.file;\n var failureMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: this.updateStatus(file, failureMessage, '0', false),\n statusText: failureMessage\n };\n this.trigger('failure', args);\n // tslint:disable-next-line\n this.updateStatus(file, args.statusText, '0');\n this.uploadSequential();\n this.checkActionComplete(true);\n }\n }\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var target;\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var value = Math.min((((loadedSize + e.loaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + ABORT_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\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_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n this.element.removeAttribute(key);\n }\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\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 * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var uploadFiles = this.validateFileType(files);\n this.uploadFiles(uploadFiles, custom);\n };\n Uploader.prototype.validateFileType = 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 Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\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 var chunkEnabled = this.checkChunkUpload();\n var _loop_4 = function (i) {\n var ajax = new Ajax(this_3.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this_3.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_3.asyncSettings.chunkSize) {\n this_3.chunkUpload(selectedFiles[i], custom);\n }\n else {\n ajax.onLoad = function (e) { _this.uploadComplete(e, selectedFiles[i], custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\n ajax.send(formData);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_4(i);\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, args) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: true\n };\n var index;\n if (this.isForm) {\n eventArgs.filesData = this.getFilesData();\n this.trigger('removing', eventArgs);\n if (!eventArgs.cancel) {\n this.clearAll();\n }\n return;\n }\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 for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n index = this.filesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4') && validUrl) {\n this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.actionCompleteCount) {\n this.checkActionComplete(false);\n }\n }\n else {\n this.checkActionComplete(false);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n 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);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n this.actionCompleteCount = 0;\n this.count = -1;\n };\n /**\n * Get the data of files which are shown in file list.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.pause = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.resume = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns void\n */\n Uploader.prototype.cancel = function (fileData) {\n var cancelingFiles = this.validateFileType(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(false)\n ], Uploader.prototype, \"enableRtl\", 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 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, \"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, \"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","import * as __uploader from '@syncfusion/ej2-inputs/uploader';\nimport * as _base from '@syncfusion/ej2-base';\n\nfunction copy(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = copy({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = copy([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n\nvar inputs = {};\ncopy(inputs, __uploader);\n\nvar base = _base;\n\nexport { inputs,base };","/**\n * uploader\n */\nexport * from './src/uploader/index';\n"],"names":["createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","ret","i","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","formatUnit","getInstance","element","component","elem","querySelector","instances","_a","inst","uniqueID","createElement","tagName","properties","SVG_REG","test","createElementNS","innerHTML","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","appendChild","insertBefore","firstElementChild","executeScript","append","querySelectorAll","script","text","head","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","call","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","len","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","compile","template","helper","fnCode","str","varCOunt","localKeys","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_SVG","childNodes","HAS_ROW","calculatePosition","currentElement","positionX","positionY","parentElement","targetValues","popupRect","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","getBodyScrollLeft","height","width","fit","viewPortElement","axis","position","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","offsetParent","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","windowWidth","innerWidth","getZindexPartial","parentZindex","index","defaultView","childrenZindex","children","isEqualNode","siblingsZindex","slice","finalValue","concat","currentZindexValue","wrapperInitialize","tag","WRAPPER","role","input","ejInstance","nodeName","nodeValue","class","aria-checked","getTextNode","childnode","rippleMouseHandler","rippleSpan","event_1","createEvent","initEvent","dispatchEvent","setHiddenInput","proxy","wrap","getAttribute","name","createResize","resizeStart","resizeBegin","resize","resizing","resizeEnd","resizeComplete","targetElement","getDOMElement","containerElement","boundary","directions","direction","resizeHandler","RESIZE_HANDLER","minHeight","minWidth","maxWidth","maxHeight","resizers","selectedHandler","onMouseDown","eventName","info","onTouchStart","wireEvents","domElement","getEventType","preventDefault","calculateValues","originalMouseX","originalMouseY","FOCUSED_HANDLER","onMouseMove","onMouseUp","RESTRICT_LEFT","setLeft","touchMoveEvent","touchEndEvent","originalWidth","parseFloat","originalHeight","originalX","originalY","touches","resizeTowards","elementClass","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","clientHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","offsetHeight","topWithoutborder","RESIZE_WITHIN_VIEWPORT","parseInt","targetTop","calculatedTop","boundaryRectValues","currentHeight","top_1","rectValues","documentWidth","clientWidth","resizeWestWidth","calculatedWidth","left_1","previousWidth","setWidth","removeResize","handlers","createSpinner","internalCreateElement","makeElement","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","inner_wrap","create_spinner_container","cssClass","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT4_WIDTH","DEFT_BOOT_WIDTH","calculateRadius","innerContainer","svg","random_generator","globalTimeOut","timeOut","create_material_element","CLS_MATERIALSPIN","mat_calculate_attributes","createMaterialSpinner","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","firstChild","item","bootCircle","CLS_SPINCIRCLE","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","CLS_BOOT4SPIN","createBootstrap4Spinner","setTheme","label","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","cls","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","path","getDashOffset","strokeSize","updatePath","change","globalInfo","previousId","getSize","getStrokeSize","rotate","createCircle","easeAnimation","transformOrigin","drawArc","PI","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","headerRegex","defaultType","Ajax","options","async","contentType","mode","emitError","url","toUpperCase","send","cancel","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","open","setRequestHeader","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","JSON","parse","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","j","some","splice","copyData","shift","trigger","eventProp","eventData_1","Observer","ranArray","boundedEvents","on","property","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","notify","argument","curObject_1","cur","destroy","boundedEvents_1","isColEName","RegExp","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","obj_1","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","getModuleName","ej2_instances","filter","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","IntlBase","extractBrowserDetail","browserInfo","culture","clientInfo","userAgent","version","language","navigator","getEvent","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","uA","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchCancelEvent","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","model","getModel","elements_1","element_1","delayAnimation","animation","animationId","frameId","cancelAnimationFrame","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","performance","now","fail","newProp","oldProp","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","map","arg","removableModule_1","mod","substring","ChildProperty","parentObj","controlParent","isParentArray","updateChange","val","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","res","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","base","getDependables","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","symbols","formatRegex","format","customFormat","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","getFormatData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isNaN","isFinite","intNumberFormatter","pattern","negativeDataRegex","pattern_1","lastIndexOf","temp","primary","s","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","flag","lead","getResultantPattern","skeleton","dateObject","isIslamic","resPattern","iType","basicPatterns","dPattern","tPattern","calendartype","defaultObject","numSystem","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","currencyCode","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","substr","patternRegex","patternMatch","G","M","L","H","'"," a","yy","EEEE","E","defaultFirstDay","islamicRegex","firstDayMapper","sun","mon","tue","wed","thu","fri","sat","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","days","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","month","C","P","N","A","formatSplit","numObject","integerPart","fractionPart","customNumberFormat","getDateSeparator","dateObj","getActualDateTimeFormat","isExcelFormat","calendar","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","getTimezoneOffset","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","a","diff","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","getWeekData","firstDay","iCulture","HijriParser","dateCorrection","getHijriDate","gDate","day","getDate","getMonth","year","getFullYear","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","gDay","gMonth","gYear","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","m","datePartMatcher","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","char","weekday","designator","eText","era","intDateFormatter","dObject","getCurrentDateValue","matches_1","length_1","curval","processNumber","curstr","getDay","desig","getHours","dec","retu","checkTwodigitNumber","tVal","curPattern","ishour","latnRegex","minute","hour","DateParser","dateParser","hourOnly","numOptions","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","tzone","hpattern","parseTimeZoneRegx","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","setFullYear","tKeys_1","tValue","pDate","setDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","Infinity","NaN","exponent","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","getFirstDayOfWeek","componentCount","lastHistoryLen","Component","randomId","needsID","enableRtl","locale","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","DialogUtility","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","droppables","toggleEvents","isIE","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","curTarget","abort","changedTouches","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","calculateParentPosition","getMousePosition","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","pageYOffset","pageXOffset","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","dragData","intOver","hoverObject","intOut","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","scrollX","helperHeight","scrollY","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","display","elementFromPoint","clientX","clientY","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parent_1","drop","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","keyCode","backspace","tab","enter","control","alt","pause","capslock","space","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","action","keyAction","unwireEvents","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflow","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","interval","Engine","isRipple","comp","getElementById","data_1","symbPattern","dateSeparator","complexFactorySetter","complexFactoryGetter","complexArrayFactorySetter","complexArrayFactoryGetter","builderFunction","classObj","enumObject","enumValue","array","keys_2","encodeURIComponent","printWindow","div","links","getElementsByTagName","reference","cloneNode","outerHTML","write","close","focus","setInterval","ready","print","clearInterval","siblings","childNodes_1","curNode","Node","ELEMENT_NODE","attrVal","PositionData","CLASSNAMES","Popup","zIndex","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","getScrollableParent","scrollRefresh","parent_2","relateToElement","relateTo","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","outerWidth","outerHeight","parent_4","reposition","content","collision","checkFixedParent","checkCollision","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","anchor","anchorPos","fixedElement","tempAnchor","calculateRelativeBasedPosition","targetType","callFlip","param","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","zIndexElement","showAnimation","hideAnimation","overflowRegex","parentStyle","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","removeRippleEffect","iconCss","span","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isFocused","isMouseClick","changeState","state","ariaState","frameSpan","getWrapper","checked","indeterminate","clickHandler","focusOutHandler","changeEventArgs","wrapper","focusHandler","initialCheckedValue","setDisabled","initWrapper","for","labelPosition","setText","keyUpHandler","labelMouseHandler","labelWrap","formElement","changeHandler","stopPropagation","formResetHandler","RadioButton","isKeyPressed","RadioButton_1","radioGrp","angularValue","radioWrap","getLabel","nextElementSibling","keyDownHandler","labelRippleHandler","mouseDownHandler","formControlName","textLabel","rippleLabel","Switch","bar","ejInst","initialSwitchCheckedValue","onLabel","offLabel","setLabel","switchInner","moduleName","rippleTouchHandler","eventType","onText","offText","switchFocusHandler","switchMouseUp","toggle","delegateMouseUpHandler","delegateKeyDownHandler","classNames","chipSet","chip","avatar","icon","deleteIcon","multiSelection","singleSelection","active","chipWrapper","iconWrapper","focused","rtl","ChipList","chips","innerText","setAttributes","createChip","setRtl","wireEvent","selectedChips","rippleFunctin","chipCreation","tabIndex","selection","chipListArray","fieldsData","getFieldValues","chipArray","elementCreation","enabled","avatarIconCss","avatarText","leadingIconCss","css","aria-label","aria-selected","chipEnabled","trailingIconCss","fields","chipAvatarElement","chipIconElement","chipTextElement","enableDelete","chipdeleteElement","find","chipData","chipElement","HTMLElement","chipsData","fieldData","selectionHandler","chipElements_1","chipCollection_1","deleteHandler","getSelectedChips","slectedChips","selectedItems_1","texts","Indexes","selectedItem","unWireEvent","keyHandler","focusInHandler","focusedElement","del","deletedItemArgs","selected","selectedItemArgs","clickedItemArgs","activeElement","removeMultipleAttributes","attr","ButtonProps","AnimationSettings","ROOT","DLG_HEADER_CONTENT","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","DLG_RESTRICT_LEFT_VALUE","DLG_RESTRICT_WIDTH_VALUE","Dialog","initRender","enableResize","setResize","animationSettings","effect","getMinHeight","headerContent","allowMaxHeight","classArray","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","l10n","checkPositionData","prevOnChange","isNumberValue","computedHeaderHeight","computedFooterHeight","minimumHeight","setMinHeight","onResizeStart","onResizing","onResizeComplete","computedHeight","computedWidth","isModal","targetEle","keyDown","buttonObj","btnObj","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","dlgOverlay","unBindEvent","closeArgs","blur","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","visible","zIndexValue","setPopupPosition","dragObj","buttonContent","buttonType","btn","ftrTemplateContent","aria-describedby","contentEle","innerContentElement","setTemplate","templateFn","isContent","headerEle","createHeaderContent","aria-labelledby","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","items","u","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","updateIsModal","buttonCount","setPopupZindex","k","isFullScreen","fullScreen","openAnimation","dialogOpen","isInteraction","isInteracted","closeAnimation","getButtons","createDialog","dialogObject","formOptions","title","isDraggable","formButtonModel","buttonPropModel","buttonProps","alert","dialogElement","alertDialogObj","alertButtonModel","okButton","setAlertButtonModel","alertOptions","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","confirmOptions","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","Tooltip","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","clear","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","showTipPointer","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","templateFunction","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","target_1","restoreElement","showTooltip","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","newpos","collidedPosition","eleOffset","arrowleft","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","findTarget","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","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","selectedFiles","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","renderButtonTemplates","unBindDropEvents","setDropArea","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","keyValue","autoUpload","uploadButton","clearButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","cloneElement","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","resume","retry","fileUploadCancel","checkHTMLAttributes","parentEle","inputElement","isPureReactComponent","browserName","directoryUpload","renderBrowseButton","initializeUpload","tabindex","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","inputWrapper","dropAreaWrapper","fileDropArea","files","size","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequentialUpload","sequenceUpload","isFileListCreated","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","keyActionHandler","resetForm","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","dropElement","dragHover","onDragLeave","onPasteFile","dataTransfer","clipboardData","pasteFile","kind","renderSelectedFiles","getAsFile","selectedElement","liElement","spinnerTarget","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","ajax","asyncSettings","removeUrl","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","response","getResponse","operation","updateStatus","rootElement","statusElement","getFilesFromFolder","filesEntries","checkDirectoryUpload","_loop_2","webkitGetAsEntry","isFile","files_2","fileObj","fullPath","isDirectory","traverseFileTree","files_3","_loop_3","this_2","createReader","readEntries","entries","targetFiles","sortFileList","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","fileDetails","getFileType","webkitRelativePath","validatedFileSize","fileSource","checkExtension","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","dropFiles","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","templateComplier","eventsArgs","fileData_2","textContainer","textElement","getFileNameOnly","fileExtension","rtlContainer","bytesToSize","iconElement","truncateName","getSlicedName","nameElement","dataset","tail","scrollWidth","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","li","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","round","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","request","cancelUploadingFile","updateProgressBarClasses","iconEle","name_1","removecanceledFile","renderFailureState","removeProgressbar","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","withCredentials","statusMessage","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","ceil","chunkUploadComplete","chunkUploadInProgress","currentChunkIndex","eventCancelByArgs","chunkUploadFailed","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","retryRequest","retryAfterDelay","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","sort","name_3","attributes_1","uploadFiles","validateFileType","chunkEnabled","_loop_4","this_3","name_4","getFilesData","validUrl","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","inputs","_base"],"mappings":"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O,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MA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ShsE,UAAW,iBAAa,GACpC+yB,IACIhoB,EAAS,KACVihE,EAAShsE,UAAW,gBAAY,GACnC+yB,IACIhoB,GAAS,IACVihE,EAAShsE,UAAW,eAAW,GAClC+yB,IACIhoB,EAAS,OACVihE,EAAShsE,UAAW,gBAAY,GACnC+yB,IACIhoB,GAAS,IACVihE,EAAShsE,UAAW,gBAAY,GACnC+yB,IACIhoB,GAAS,IACVihE,EAAShsE,UAAW,kBAAc,GACrC+yB,IACInnB,KAAYkgE,KACbE,EAAShsE,UAAW,eAAW,GAClC+yB,IACIhoB,EAAS,KACVihE,EAAShsE,UAAW,yBAAqB,GAC5C+yB,IACIhoB,EAAS,IACVihE,EAAShsE,UAAW,mBAAe,GACtC+yB,IACIhoB,EAAS,MACVihE,EAAShsE,UAAW,mBAAe,GACtC+yB,IACIhoB,EAAS,OACVihE,EAAShsE,UAAW,gBAAY,GACnC+yB,IACIhnB,OAAiB8/D,KAClBG,EAAShsE,UAAW,aAAS,GAChC+yB,IACIhoB,GAAS,IACVihE,EAAShsE,UAAW,oBAAgB,GACvC+yB,IACIhoB,GAAS,IACVihE,EAAShsE,UAAW,uBAAmB,GAC1C+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,eAAW,GAClC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,sBAAkB,GACzC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,iBAAa,GACpC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,yBAAqB,GAC5C+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,gBAAY,GACnC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,iBAAa,GACpC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,eAAW,GAClC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,eAAW,GAClC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,gBAAY,GACnC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,gBAAY,GACnC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,gBAAY,GACnC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,cAAU,GACjC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,oBAAgB,GACvC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,oBAAgB,GACvC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,sBAAkB,GACzC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,iBAAa,GACpC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,eAAW,GAClC+yB,IACI1mB,KACD2/D,EAAShsE,UAAW,gBAAY,GACnCgsE,EAAWj5C,IACPpmB,GACDq/D,IAEL/0B,IC7jFE4pC,OCpCJ,SDDcz9E,EAAQC,EAAOC,EAAQC,GACjC,IAAIC,EAASJ,MACThC,EAASqC,UAAUrC,OACnBmC,IACAnC,GAAkB,GA2BtB,IAAK,IAzBDsC,EAAU,SAAU5C,GACpB,IAAK6C,EAAY7C,GACb,MAAO,WAEX,IAAI8C,EAAOD,EAAY7C,GACvBiC,OAAOb,KAAK0B,GAAMC,QAAQ,SAAU5B,GAChC,IAEI6B,EAFAC,EAAMP,EAAOvB,GACb+B,EAAOJ,EAAK3B,GAEZsB,IAAShB,SAASyB,IAASf,MAAMC,QAAQc,IACrCzB,SAASyB,IACTF,EAAQC,MACRP,EAAOvB,GAAO+B,KAASF,EAAOE,EAAMT,KAGpCO,EAAQC,MACRP,EAAOvB,GAAO+B,KAASF,EAAOE,EAAMT,IAIxCC,EAAOvB,GAAO+B,KAItBL,EAAcF,UACT3C,EAAI,EAAGA,EAAIM,EAAQN,IACxB4C,EAAQ5C,GAMhBkD,CAAK68E,+EAEL,IAAIhlD,GAAOilD"}