{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/internationalization.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.js","../../src/component.js","../../src/template.js","../../src/template-engine.js","../../src/hijri-parser.js","../../src/intl/date-formatter.js","../../src/intl/number-formatter.js","../../src/intl/date-parser.js","../../src/intl/number-parser.js","../../src/observer.js","../../src/intl/intl-base.js","../../src/ajax.js","../../src/fetch.js","../../src/browser.js","../../src/event-handler.js","../../src/module-loader.js","../../src/child-property.js","../../src/draggable.js","../../src/droppable.js","../../src/keyboard.js","../../src/l10n.js","../../src/touch.js","../../src/sanitize-helper.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n *\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @returns {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 *\n * @param {Function} handler - callback function to be triggered.\n * @returns {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 *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\nexport function getValue(nameSpace, obj) {\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[parseInt(i.toString(), 10)]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n *\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 * @returns {any} ?\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[parseInt(i.toString(), 10)];\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 *\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} key - String value to the get the inner object\n * @returns {void} ?\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\nexport var containerObject = typeof window !== 'undefined' ? window : {};\n/**\n * Check weather the given argument is only object.\n *\n * @param {any} obj - Object which is need to check.\n * @returns {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 *\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @returns {any} ?\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[\"\" + enumValue];\n}\n/**\n * Merge the source object into destination object.\n *\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @returns {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 *\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 * @param {boolean} deep ?\n * @returns {Object} ?\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n var args = [copied, first, second, deep];\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!args[parseInt(i.toString(), 10)]) {\n return \"continue\";\n }\n var obj1 = args[parseInt(i.toString(), 10)];\n Object.keys(obj1).forEach(function (key) {\n var src = result[\"\" + key];\n var copy = obj1[\"\" + key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n if (Array.isArray(clone) && Object.prototype.hasOwnProperty.call(clone, 'isComplexArray')) {\n extend(clone, {}, copy, deep);\n }\n else {\n result[\"\" + key] = extend(clone, {}, copy, deep);\n }\n }\n else {\n /* istanbul ignore next */\n clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\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 *\n * @param {any} value - To check the object is null or undefined\n * @returns {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 *\n * @param {any} value - To check the object is undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value || value === null);\n}\n/**\n * To return the generated unique name\n *\n * @param {string} definedName - To concatenate the unique id to provided name\n * @returns {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 *\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 * @returns {Function} ?\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n return function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\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/**\n * To convert the object to string for query url\n *\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 *\n * @param {any} value - Specifies the T type array to be checked.\n * @returns {boolean} ?\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 *\n * @param {Element} child - Specifies the child element to compare with parent.\n * @param {Element} parent - Specifies the parent element.\n * @returns {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 *\n * @param {string} message - Specifies the error message to be thrown.\n * @returns {void} ?\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw new Error(e.message + '\\n' + e.stack);\n }\n}\n/**\n * This function is used to print given element\n *\n * @param {Element} element - Specifies the print content element.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {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('base, link, style'));\n var blinks = [].slice.call(document.getElementsByTagName('body')[0].querySelectorAll('link, style'));\n if (blinks.length) {\n for (var l = 0, len = blinks.length; l < len; l++) {\n links.push(blinks[parseInt(l.toString(), 10)]);\n }\n }\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[parseInt(i.toString(), 10)].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\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 *\n * @param {number|string} value ?\n * @returns {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|cm|mm|in|px|pt|pc|%|em|ex|ch|rem|vw|vh|vmin|vmax/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n *\n * @returns {HTMLElement} result\n * @param {HTMLElement | object} element ?\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[\"\" + xPath])) {\n return document.evaluate(element[\"\" + xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n *\n * @param {string | HTMLElement} element ?\n * @param {any} component ?\n * @returns {Object} ?\n * @private\n */\nexport function getInstance(element, component) {\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 *\n * @param {string | HTMLElement} element ?\n * @param {Object} instance ?\n * @returns {void} ?\n * @private\n */\nexport function addInstance(element, instance) {\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 *\n * @returns {any} ?\n * @private\n */\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\n/**\n *\n * @param {Int16Array} num ?\n * @returns {string} ?\n */\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];\n }\n return ret;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\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 *\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n *\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 var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n *\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 *\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 if (!Object.prototype.hasOwnProperty.call(res, 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 *\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 var regExp = RegExp;\n return new regExp(regexStr, 'g');\n };\n /**\n *\n * @param {Object} prop ?\n * @returns {Object} ?\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 *\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[parseInt(i.toString(), 10)] + '|';\n }\n else {\n ret += val[parseInt(i.toString(), 10)];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\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 *\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 * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} needSymbols ?\n * @param {boolean} blazorMode ?\n * @returns {Object} ?\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n var regExp = RegExp;\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(blazorMode ? 'numberSymbols' : '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 *\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[parseInt(i.toString(), 10)] = digits[parseInt(i.toString(), 10)];\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/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.إ.',\n 'BHD': 'د.ب.',\n 'DZD': 'د.ج.',\n 'EGP': 'ج.م.',\n 'ILS': '₪',\n 'IQD': 'د.ع.',\n 'JOD': 'د.ا.',\n 'KMF': 'CF',\n 'KWD': 'د.ك.',\n 'LBP': 'ل.ل.',\n 'LYD': 'د.ل.',\n 'MAD': 'د.م.',\n 'MRU': 'أ.م.',\n 'OMR': 'ر.ع.',\n 'QAR': 'ر.ق.',\n 'SAR': 'ر.س.',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'ل.س.',\n 'TND': 'د.ت.',\n 'YER': 'ر.ي.',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': '¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'Kč',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'ރ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': '₡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': '֏',\n 'ISK': 'kr',\n 'JPY': '¥',\n 'GEL': '₾',\n 'CVE': '​',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': '₩',\n 'KRW': '₩',\n 'KGS': 'сом',\n 'AOA': 'Kz',\n 'LAK': '₭',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': '₮',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रु',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zł',\n 'AFN': '؋',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': '₴',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'смн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'сўм',\n 'VND': '₫',\n 'TWD': 'NT$'\n};\n/**\n *\n * @param {string} currencyCode ?\n * @returns {string} ?\n */\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\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, isBlazor } 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 *\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n *\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n *\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 *\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 *\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 if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\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 *\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 if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n *\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 *\n * @param {Date} 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 *\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 *\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 *\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 *\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @param {boolean} isExcel ?\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n *\n * @returns {number} ?\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n /**\n * Returns the culture\n *\n * @returns {string} ?\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 *\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n * @returns {void} ?\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 *\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 *\n * @param {Object[]} data 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 *\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 *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} type ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\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 = isBlazor() ? getValue('numberSymbols', numObject) : 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 numeric CLDR number base object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @returns {string} ?\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n *\n * @param {string} mode ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n *\n * @param {string} tagName - Name of the tag, id and class names.\n * @param {ElementProperties} properties - Object to set properties in the element.\n * @param {ElementProperties} properties.id - To set the id to the created element.\n * @param {ElementProperties} properties.className - To add classes to the element.\n * @param {ElementProperties} properties.innerHTML - To set the innerHTML to element.\n * @param {ElementProperties} properties.styles - To set the some custom styles to element.\n * @param {ElementProperties} properties.attrs - To set the attributes to element.\n * @returns {any} ?\n * @private\n */\nexport function createElement(tagName, properties) {\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 *\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 * @returns {any} .\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n var regExp = RegExp;\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 (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new regExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n *\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 * @returns {any} .\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 var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to get classlist.\n *\n * @param {string | string[]} classes - An element the need to check visibility\n * @returns {string[]} ?\n * @private\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 *\n * @param {Element|Node} element - An element the need to check visibility\n * @returns {boolean} ?\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 *\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 * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\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 *\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 * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n if (fromElements instanceof NodeList) {\n while (fromElements.length > 0) {\n docFrag.appendChild(fromElements[0]);\n }\n }\n else {\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\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 *\n * @param {Element} ele - An element is going to evaluate the script\n * @returns {void} ?\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 parentnode\n *\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @returns {any} ?\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n *\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @returns {void} ?\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 *\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {string} attributes - JSON Object that is going to as attributes.\n * @returns {Element} ?\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 if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[\"\" + iKey] = attributes[\"\" + key];\n }\n else {\n ele.setAttribute(key, attributes[\"\" + key]);\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {any} ?\n * @private\n */\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {HTMLElement[]} ?\n * @private\n */\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * The function selects an id of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @returns {string} ?\n * @private\n */\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[parseInt(i.toString(), 10)].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {\n if (!list[parseInt(j.toString(), 10)].match(/\\[.*\\]/)) {\n var splitId = list[parseInt(j.toString(), 10)].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[parseInt(j.toString(), 10)].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[parseInt(j.toString(), 10)] = setId.join('.');\n }\n }\n }\n }\n idList[parseInt(i.toString(), 10)] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n *\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @returns {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 *\n * @param {Element|Node} element - An element that need to get siblings.\n * @returns {Element[]} ?\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 *\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 * @returns {string} ?\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[\"\" + property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n *\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @returns {void} ?\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n element.style[\"\" + key] = attrs[\"\" + key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n *\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 * @returns {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 *\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @returns {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/**\n * Method to get the html text from DOM.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} innerHTML - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function includeInnerHTML(ele, innerHTML) {\n ele.innerHTML = innerHTML;\n}\n/**\n * Method to get the containsclass.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} className - String selector which element will satisfy.\n * @returns {any} ?\n * @private\n */\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n var regExp = RegExp;\n return new regExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Object} element - Element to compare with the selector.\n * @param {boolean} deep ?\n * @returns {any} ?\n * @private\n */\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n * @returns {void} ?\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n *\n * @param {Object} options ?\n * @param {string} element ?\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\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 *\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange ? - Specifies to true when we set properties.\n * @returns {void} ?\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 else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n /**\n * Calls for child element data bind\n *\n * @param {Object} obj ?\n * @param {Object} parent ?\n * @returns {void} ?\n */\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 * @returns {void} ?\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 Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[\"\" + sfBlazor].updateModel) {\n window[\"\" + sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n var newChanges = {};\n newChanges[\"\" + key] = newValue;\n this.serverDataBind(newChanges);\n }\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 /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} handler - Specifies the call to run when the event occurs.\n * @returns {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 *\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} handler - Specifies the function to remove\n * @returns {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 *\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 * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @returns {void} ?\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[\"\" + blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n *\n * @returns {void} ?\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 * @returns {void} ?\n */\n Base.prototype.destroy = function () {\n var _this = this;\n // eslint-disable-next-line camelcase\n this.element.ej2_instances =\n this.element.ej2_instances ?\n this.element.ej2_instances.filter(function (i) {\n if (proxyToRaw) {\n return proxyToRaw(i) !== proxyToRaw(_this);\n }\n return i !== _this;\n })\n : [];\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 *\n * @param {HTMLElement} elem Specifies the HTMLElement or element id string.\n * @param {string} comp Specifies the component module name or Component.\n * @returns {any} ?\n */\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[parseInt(i.toString(), 10)];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @returns {void} ?\n * @private\n */\nexport function removeChildInstance(element) {\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];\n var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\nexport var proxyToRaw;\nexport var setProxyToRaw = function (toRaw) { proxyToRaw = toRaw; };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n *\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 * @returns {ClassObject} ?\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!Object.prototype.hasOwnProperty.call(instance.properties, 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 *\n * @param {ClassObject} instance ?\n * @param {string} curKey ?\n * @param {Object[]} defaultValue ?\n * @param {Object} type ?\n * @param {boolean} isSetter ?\n * @param {boolean} isFactory ?\n * @returns {Object[]} ?\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[parseInt(i.toString(), 10)], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n this.properties[\"\" + curKey] = defaultValue;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n * Set the properties for the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[\"\" + curKey] !== newValue) {\n var oldVal = Object.prototype.hasOwnProperty.call(this.properties, 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 *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n return this.properties[\"\" + curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\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}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n if (!Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], 'push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[\"\" + curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[\"\" + curKey], extendFunc, descriptor);\n });\n }\n if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], 'isComplexArray')) {\n Object.defineProperty(this.properties[\"\" + curKey], 'isComplexArray', { value: true });\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = Object.prototype.hasOwnProperty.call(this.properties, 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}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!Object.prototype.hasOwnProperty.call(this.properties, 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 *\n * @param {string} dFunc ?\n * @param {string} curKey ?\n * @param {Object} type ?\n * @param {Object} prop ?\n * @returns {Object} ?\n */\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n var newValueParse = newValue[parseInt(i.toString(), 10)];\n Array.prototype[\"\" + dFunc].apply(prop, [newValueParse]);\n var model = getArrayModel(keyString + (prop.length - 1), newValueParse, !this.controlParent, dFunc);\n this.serverDataBind(model, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop': {\n Array.prototype[\"\" + dFunc].apply(prop);\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n }\n return prop;\n };\n}\n/**\n *\n * @param {string} keyString ?\n * @param {Object} value ?\n * @param {boolean} isControlParent ?\n * @param {string} arrayFunction ?\n * @returns {Object} ?\n */\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[\"\" + keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[\"\" + keyString][\"\" + action] = arrayFunction;\n }\n }\n return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\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 *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\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 *\n * @param {Function} type - Specifies the class factory type of complex object.\n * @returns {PropertyDecorator} ?\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 *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\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 *\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyCollectionInfo} ?\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 *\n * @returns {PropertyDecorator} ?\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 * @param {Function} classConstructor ?\n * @returns {void} ?\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 *\n * @param {BuildInfo} target ?\n * @param {string} key ?\n * @param {string} propertyType ?\n * @param {Object} defaultValue ?\n * @param {Function} type ?\n * @returns {void} ?\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 target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n}\n/**\n * Returns an object containing the builder properties\n *\n * @param {Function} component ?\n * @returns {Object} ?\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 *\n * @param {any} component -specifies the target component for which builder to be created.\n * @returns {Object} ?\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 (!Object.prototype.hasOwnProperty.call(builderFunction, '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 *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (Object.prototype.hasOwnProperty.call(context, '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 *\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @returns {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 *\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @returns {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 *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (animationMode === 'Disable' || animationMode === GlobalAnimationMode.Disable) {\n if (model.begin) {\n model.begin.call(this, model);\n }\n if (model.end) {\n model.end.call(this, model);\n }\n }\n else {\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 /**\n * Triggers animation\n *\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 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 *\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 * @param {AnimationModel} newProp ?\n * @param {AnimationModel} oldProp ?\n * @returns {void} ?\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n *\n * @private\n * @returns {void} ?\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 *\n * @private\n * @param {HTMLElement} element - Target element\n * @param {RippleOptions} rippleOptions - Ripple options .\n * @param {Function} done .\n * @returns {void} .\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 // do nothing.\n });\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}\n/**\n * Handler for ripple model\n *\n * @param {RippleOptions} rippleOptions ?\n * @returns {RippleOptions} ?\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 *\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 *\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 *\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 *\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 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 *\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 * Defines the Modes of Global animation.\n *\n * @private\n */\nexport var animationMode;\n/**\n * This method is used to enable or disable the animation for all components.\n *\n * @param {string|GlobalAnimationMode} value - Specifies the value to enable or disable the animation for all components. When set to 'enable', it enables the animation for all components, regardless of the individual component's animation settings. When set to 'disable', it disables the animation for all components, regardless of the individual component's animation settings.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n/**\n * Defines the global animation modes for all components.\n */\nexport var GlobalAnimationMode;\n(function (GlobalAnimationMode) {\n /**\n * Defines the global animation mode as Default. Animation is enabled or disabled based on the component's animation settings.\n */\n GlobalAnimationMode[\"Default\"] = \"Default\";\n /**\n * Defines the global animation mode as Enable. Enables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Enable\"] = \"Enable\";\n /**\n * Defines the global animation mode as Disable. Disables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Disable\"] = \"Disable\";\n})(GlobalAnimationMode || (GlobalAnimationMode = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } 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, select } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n// Decalre the static variable to count the instance\n// Decalre the static variable to find if control limit exceed or not\n// We have added styles to inline type so here declare the static variable to detect if banner is added or not\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\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 * @param {Object} options ?\n * @param {string} selector ?\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n *\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n _this.isAngular = false;\n _this.isReact = false;\n _this.isVue = false;\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 onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n // Based on the considered control list we have count the instance\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * Destroys the sub modules while destroying the widget\n *\n * @returns {void} ?\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n this.detachUnloadEvent();\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 * @returns {void} ?\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 Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n *\n * @returns {HTMLElement} ?\n */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n *\n * @returns {any} ?\n */\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Adding unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.attachUnloadEvent = function () {\n this.handleUnload = this.handleUnload.bind(this);\n window.addEventListener('pagehide', this.handleUnload);\n };\n /**\n * Handling unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.handleUnload = function () {\n this.setPersistData();\n };\n /**\n * Removing unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.detachUnloadEvent = function () {\n window.removeEventListener('pagehide', this.handleUnload);\n };\n /**\n * Appends the control within the given HTML element\n *\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n * @returns {void} ?\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\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 this.attachUnloadEvent();\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 // Throw a warning for the required modules to be injected.\n var ignoredComponents = {\n schedule: 'all',\n diagram: 'all',\n PdfViewer: 'all',\n grid: ['logger'],\n richtexteditor: ['link', 'table', 'image', 'audio', 'video', 'formatPainter', 'emojiPicker', 'pasteCleanup', 'htmlEditor', 'toolbar'],\n treegrid: ['filter'],\n gantt: ['tooltip'],\n chart: ['Export', 'Zoom'],\n accumulationchart: ['Export'],\n 'query-builder': 'all'\n };\n var component = this.getModuleName();\n if (this.requiredModules && (!ignoredComponents[\"\" + component] || ignoredComponents[\"\" + component] !== 'all')) {\n var modulesRequired = this.requiredModules();\n for (var _i = 0, _a = this.moduleLoader.getNonInjectedModules(modulesRequired); _i < _a.length; _i++) {\n var module = _a[_i];\n var moduleName = module.name ? module.name : module.member;\n if (ignoredComponents[\"\" + component] && ignoredComponents[\"\" + component].indexOf(module.member) !== -1) {\n continue;\n }\n var componentName = component.charAt(0).toUpperCase() + component.slice(1); // To capitalize the component name\n console.warn(\"[WARNING] :: Module \\\"\" + moduleName + \"\\\" is not available in \" + componentName + \" component! You either misspelled the module name or forgot to load it.\");\n }\n }\n // Checked weather cases are valid or not. If control leads to more than five counts\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n *\n * @param {Node} wrapperElement ?\n * @returns {void} ?\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n window[\"\" + sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n *\n * @returns {void} ?\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\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 *\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 * @returns {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 *\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 * @returns {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 *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @returns {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 *\n * @returns {Function} ?\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @param {Function} moduleList ?\n * @returns {void} ?\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[parseInt(i.toString(), 10)]) === -1) {\n this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n *\n * @param {string} tagName ?\n * @param {ElementProperties} prop ?\n * @param {boolean} isVDOM ?\n * @returns {any} ?\n * @private\n */\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n return createElement(tagName, prop);\n };\n /**\n *\n * @param {Function} handler - handler to be triggered after state Updated.\n * @param {any} argument - Arguments to be passed to caller.\n * @returns {void} .\n * @private\n */\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n this.setState();\n this.currentContext = { calls: handler, args: argument };\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;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() +\n this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\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 = 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 var value = obj[\"\" + key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n var regExp = RegExp;\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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s-+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n *\n * @param {RegExp} value - Value expression.\n * @returns {RegExp} ?\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 *\n * @param {string | Function} template - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n * @private\n */\nexport function compile(template, helper, ignorePrefix) {\n if (typeof template === 'function') {\n return template;\n }\n else {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n var condtion = \"var valueRegEx = (/value=\\\\'([A-Za-z0-9 _]*)((.)([\\\\w)(!-;?-\\u25A0\\\\s]+)['])/g);\\n var hrefRegex = (/(?:href)([\\\\s='\\\"./]+)([\\\\w-./?=&\\\\\\\\#\\\"]+)((.)([\\\\w)(!-;/?-\\u25A0\\\\s]+)['])/g);\\n if(str.match(valueRegEx)){\\n var check = str.match(valueRegEx);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(valueRegEx)[i].split('value=')[1];\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n str = str.replace(str, str1);\\n }\\n else if (str.match(/(?:href='')/) === null) {\\n if(str.match(hrefRegex)) {\\n var check = str.match(hrefRegex);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(hrefRegex)[i].split('href=')[1];\\n if (check1) {\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n }\\n str = str.replace(str, str1);\\n }\\n }\\n \";\n var fnCode = 'var str=\"' + evalExpResult + '\";' + condtion + ' return str;';\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n }\n}\n/** function used to evaluate the function expression\n *\n * @param {string} str ?\n * @param {string} nameSpace ?\n * @param {Object} helper ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n if (exp.test(str)) {\n var insideBraces = false;\n var outputString = '';\n for (var i = 0; i < str.length; i++) {\n if (str[i + ''] === '$' && str[i + 1] === '{') {\n insideBraces = true;\n }\n else if (str[i + ''] === '}') {\n insideBraces = false;\n }\n outputString += (str[i + ''] === '\"' && !insideBraces) ? '\\\\\"' : str[i + ''];\n }\n str = outputString;\n }\n else {\n str = str.replace(/\\\\?\"/g, '\\\\\"');\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /@|#|\\$/gm;\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, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\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 return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix)\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 && Object.prototype.hasOwnProperty.call(helper, fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /@|\\$|#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /@|\\$|#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys, ignorePrefix)) +\n '+\"';\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 if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = cnt !== '' ? '\"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+\"' : '${}';\n }\n }\n return cnt;\n });\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix && str !== 'true' && str !== 'false') ? nameSpace + '.' + str : str);\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? 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 *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n/**\n * Replace double slashes to single slash.\n *\n * @param {string} tempStr ?\n * @returns {any} ?\n */\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n return tempStr;\n }\n else {\n return tempStr.replace(SINGLE_SLASH, double);\n }\n}\n/**\n *\n * @param {string} str ?\n * @param {string} nameSpaceNew ?\n * @param {string[]} keys ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /@|\\$|#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, ignorePrefix);\n }\n }\n else {\n return str;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\n/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+ 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[parseInt(i.toString(), 10)] > 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 /**\n *\n * @param {number} year ?\n * @param {number} month ?\n * @param {number} day ?\n * @returns {Date} ?\n */\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, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|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 f: 'getMilliseconds'\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 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n *\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which date will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : 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 switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n formatOptions.weekday = getValue('days.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.month = dependable.dateObject[\"\" + base.month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G': {\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n }\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 *\n * @param {Date} value ?\n * @param {FormatOptions} options ?\n * @returns {string} ?\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 curvalstr = '';\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 case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n curvalstr = value[\"\" + timeSetter[\"\" + char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\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 }\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 }\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 }\n case ':':\n ret += options.numMapper.numberSymbols[\"\" + timeSeparator];\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\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 * @param {number} val ?\n * @param {number} len ?\n * @returns {string} ?\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 *\n * @param {number} tVal ?\n * @param {string} pattern ?\n * @returns {string} ?\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } 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 percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\n/**\n * Module for number formatting.\n *\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\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} cldr - Specifies the global cldr data collection.\n * @returns {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 var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n 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 if (!isUndefined(fOptions.useGrouping) && fOptions.useGrouping) {\n fOptions.useGrouping = cOptions.pData.useGrouping;\n }\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\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 && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\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 }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\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, option);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n *\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 *\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 *\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 *\n * @param {number} value ?\n * @param {base.GenericFormatOptions} fOptions ?\n * @param {CommonOptions} dOptions ?\n * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions, option) {\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, option);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n if (dOptions.isCustomFormat && curData.minimumFractionDigits < curData.maximumFractionDigits\n && /\\d+\\.\\d+/.test(fValue)) {\n var temp = fValue.split('.');\n var decimalPart = temp[1];\n var len = decimalPart.length;\n for (var i = len - 1; i >= 0; i--) {\n if (decimalPart[parseInt(i.toString(), 10)] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n fValue = temp[0] + '.' + decimalPart;\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 fValue = curData.format === '#,###,,;(#,###,,)' ? this.customPivotFormat(parseInt(fValue, 10)) : fValue;\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 if (fValue === '0' && option && option.format === '0') {\n return fValue + curData.nend;\n }\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\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 *\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 *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max, option) {\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 var str = value + '';\n if (str[0] === '0' && option && option.format === '###.00') {\n str = str.slice(1);\n }\n return str;\n };\n /**\n * Returns integer processed numeric string\n *\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 /**\n * Returns custom format for pivot table\n *\n * @param {number} value ?\n * @returns {string} ?\n */\n NumberFormat.customPivotFormat = function (value) {\n if (value >= 500000) {\n value /= 1000000;\n var _a = value.toString().split('.'), integer = _a[0], decimal = _a[1];\n return decimal && +decimal.substring(0, 1) >= 5\n ? Math.ceil(value).toString()\n : Math.floor(value).toString();\n }\n return '';\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar standalone = 'stand-alone';\nvar latnRegex = /^[0-9]*$/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/**\n * Date Parser.\n *\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which string date will be parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\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), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\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 = isBlazor() ? dependable.parserObject.numbers\n : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[parseInt(i.toString(), 10)];\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 var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n var weekObject = parser.reverseObject(weekData);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n }\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n monthData = getValue('months.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n monthData = dependable.dateObject[\"\" + month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n parseOptions[\"\" + charKey] = parser.reverseObject(monthData);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\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 'W': {\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n }\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 var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[\"\" + charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n break;\n }\n case 'G': {\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[\"\" + charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + '?)';\n break;\n }\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 }\n case '\\'': {\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n }\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 var regExp = RegExp;\n parseOptions.parserRegex = new regExp('^' + regexString + '$', 'i');\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 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 /**\n * Returns date object for provided date options\n *\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', 'milliseconds', '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) && key === 'day') {\n res.setDate(1);\n }\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 *\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 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 var cultureOptions = ['en-US', 'en-MH', 'en-MP'];\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n matchString = ((prop !== 'month') && (prop === 'designator') && parseOptions.culture && parseOptions.culture.indexOf('en-') !== -1 && cultureOptions.indexOf(parseOptions.culture) === -1)\n ? matchString.toLowerCase() : matchString;\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 *\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 *\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 cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\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 var 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 *\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","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar regExp = RegExp;\nvar parseRegex = new regExp('^([^0-9]*)' + '(([0-9,]*[0-9]+)(.[0-9]+)?)' + '([Ee][+-]?[0-9]+)?([^0-9]*)$');\nvar groupRegex = /,/g;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n *\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {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 if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n 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 }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\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 *\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 value = value.indexOf('-') !== -1 ? value.replace('-.', '-0.') : value;\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 (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { isNullOrUndefined, getValue, extend, isBlazor } 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 * To attach handler for given property in current context.\n *\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 * @returns {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, id: id }];\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 *\n * @param {string} property - 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 * @returns {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[parseInt(i.toString(), 10)].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[parseInt(i.toString(), 10)].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 *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @returns {void} ?\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[\"\" + blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\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 if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[parseInt(index.toString(), 10)];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n *\n * @returns {void} ?\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * To remove internationalization events\n *\n * @returns {void} ?\n */\n Observer.prototype.offIntlEvents = function () {\n var eventsArr = this.boundedEvents['notifyExternalChange'];\n if (eventsArr) {\n for (var i = 0; i < eventsArr.length; i++) {\n var curContext = eventsArr[parseInt(i.toString(), 10)].context;\n if (curContext && curContext.detectFunction && curContext.randomId && !curContext.isRendered) {\n this.off('notifyExternalChange', curContext.detectFunction, curContext.randomId);\n i--;\n }\n }\n if (!this.boundedEvents['notifyExternalChange'].length) {\n delete this.boundedEvents['notifyExternalChange'];\n }\n }\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n return Object.prototype.hasOwnProperty.call(this.boundedEvents, prop) === false || this.boundedEvents[\"\" + prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n *\n * @param {BoundOptions[]} boundedEvents ?\n * @param {Function} handler ?\n * @returns {boolean} ?\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","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nvar regExp = RegExp;\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var IntlBase;\n(function (IntlBase) {\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([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 IntlBase.dateConverterMapper = /dddd|ddd/ig;\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 = new regExp('(^[ncpae]{1})([0-1]?[0-9]|20)?$', 'i');\n IntlBase.currencyFormatRegex = new regExp('(^[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 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 IntlBase.blazorDefaultObject = {\n 'numbers': {\n 'mapper': {\n '0': '0',\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 },\n 'mapperDigits': '0123456789',\n 'numberSymbols': {\n 'decimal': '.',\n 'group': ',',\n 'plusSign': '+',\n 'minusSign': '-',\n 'percentSign': '%',\n 'nan': 'NaN',\n 'timeSeparator': ':',\n 'infinity': '∞'\n },\n 'timeSeparator': ':',\n 'currencySymbol': '$',\n 'currencypData': {\n 'nlead': '$',\n 'nend': '',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentpData': {\n 'nlead': '',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentnData': {\n 'nlead': '-',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'currencynData': {\n 'nlead': '($',\n 'nend': ')',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalnData': {\n 'nlead': '-',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalpData': {\n 'nlead': '',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n }\n },\n 'dates': {\n 'dayPeriods': {\n 'am': 'AM',\n 'pm': 'PM'\n },\n 'dateSeperator': '/',\n 'days': {\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 '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 'months': {\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 '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 'eras': {\n '1': 'AD'\n }\n }\n };\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 *\n * @private\n * @param {string} skeleton ?\n * @param {Object} dateObject ?\n * @param {string} type ?\n * @param {boolean} isIslamic ?\n * @param {string} blazorCulture ?\n * @returns {string} ?\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\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 }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n *\n * @private\n * @param {Object} cldr ?\n * @param {string} culture ?\n * @param {string} mode ?\n * @param {boolean} isNumber ?\n * @returns {any} ?\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n *\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 *\n * @param {string} format ?\n * @returns {string} ?\n */\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n /**\n *\n * @param {DateFormatOptions} formatOptions ?\n * @param {string} culture ?\n * @returns {DateFormatOptions} ?\n */\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n *\n * @private\n * @param {string} skeleton ?\n * @returns {any} ?\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 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 *\n * @private\n * @param {string} pattern ?\n * @param {boolean} needFraction ?\n * @param {string} cSymbol ?\n * @param {boolean} fractionOnly ?\n * @returns {any} ?\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 *\n * @private\n * @param {string} val ?\n * @param {string} sym ?\n * @returns {string} ?\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n val = val.replace(IntlBase.defaultCurrency, sym);\n return (sym === '') ? val.trim() : val;\n }\n return '';\n }\n IntlBase.changeCurrencySymbol = changeCurrencySymbol;\n /**\n * Returns currency symbol based on currency code ?\n *\n * @private\n * @param {Object} numericObject ?\n * @param {string} currencyCode ?\n * @param {string} altSymbol ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {any} obj ?\n * @returns {any} ?\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[parseInt(i.toString(), 10)]] = customNumberFormat(formatSplit[parseInt(i.toString(), 10)], 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 *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {Object} numObject ?\n * @returns {any} ?\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 return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n var spaceCapture = integerPart.match(/ $/g) ? true : false;\n var spaceGrouping = integerPart.replace(/ $/g, '').indexOf(' ') !== -1;\n cOptions.useGrouping = integerPart.indexOf(',') !== -1 || spaceGrouping;\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 dOptions.isCustomFormat = true;\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 = spaceGrouping ? ' ' : dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/'/g, '');\n cOptions.nend = spaceCapture ? ' ' + cOptions.nend.replace(/'/g, '') : cOptions.nend.replace(/'/g, '');\n }\n return cOptions;\n }\n IntlBase.customNumberFormat = customNumberFormat;\n /**\n * Returns formatting options for currency or percent type\n *\n * @private\n * @param {string[]} parts ?\n * @param {string} actual ?\n * @param {string} symbol ?\n * @returns {any} ?\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[parseInt(i.toString(), 10)];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[\"\" + typeMapper[parseInt(i.toString(), 10)]] = 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 *\n * @private\n * @param {Object} dateObj ?\n * @returns {string} ?\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[dM]([^dM])[dM]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\n * @private\n * @param {string} culture ?\n * @param {DateFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcelFormat ?\n * @returns {string} ?\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\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 *\n * @param {string} actual ?\n * @param {any} option ?\n * @returns {any} ?\n */\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n IntlBase.processSymbol = processSymbol;\n /**\n * Returns Native Number pattern\n *\n * @private\n * @param {string} culture ?\n * @param {NumberFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcel ?\n * @returns {string} ?\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\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 = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n 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' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n /**\n *\n * @param {string} pattern ?\n * @param {number} minDigits ?\n * @param {number} maxDigits ?\n * @returns {string} ?\n */\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 IntlBase.fractionDigitsPattern = fractionDigitsPattern;\n /**\n *\n * @param {string} pattern ?\n * @param {number} digits ?\n * @returns {string} ?\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 IntlBase.minimumIntegerPattern = minimumIntegerPattern;\n /**\n *\n * @param {string} pattern ?\n * @returns {string} ?\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[parseInt(x.toString(), 10)] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n IntlBase.groupingPattern = groupingPattern;\n /**\n *\n * @param {string} culture ?\n * @param {Object} cldr ?\n * @returns {number} ?\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] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;\n }\n return firstDayMapper[\"\" + firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param {any} pData ?\n * @param {string} aCurrency ?\n * @param {string} rCurrency ?\n * @returns {void} ?\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n * @param {Date} date ?\n * @returns {number} ?\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(date.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\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 *\n * @param {string|Object} options ?\n * @param {string} type ?\n * @param {boolean} async ?\n * @returns defaultType any\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n *\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 *\n * Send the request to server.\n *\n * @param {any} data - To send the user data\n * @returns {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 httpRequest: null\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 eventArgs.httpRequest = _this.httpRequest;\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 *\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 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 var header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined as isNOU, isObject, merge } from './util';\n/**\n * The Fetch class provides a way to make asynchronous network requests, typically to retrieve resources from a server.\n * ```typescript\n * var fetchApi = new Fetch('index.html', 'GET');\n * fetchApi.send()\n * .then((value) => {\n * console.log(value);\n * }).catch((error) => {\n * console.log(error);\n * });\n * ```\n */\nvar Fetch = /** @class */ (function () {\n /**\n * Constructor for Fetch class.\n *\n * @param {string|Object} options - Specifies the URL or Request object with URL to which the request is to be sent.\n * @param {string} type - Specifies which request method is to be used, such as GET, POST, etc.\n * @param {string} contentType - Specifies the content type of the request, which is used to indicate the original media type of the resource.\n */\n function Fetch(options, type, contentType) {\n /**\n * Specifies which request method is to be used, such as GET, POST, etc.\n *\n * @default GET\n */\n this.type = 'GET';\n /**\n * A boolean value indicating whether to reject the promise or not.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n if (typeof options === 'string') {\n this.url = options;\n this.type = !isNOU(type) ? type.toUpperCase() : this.type;\n this.contentType = contentType;\n }\n else if (isObject(options) && Object.keys(options).length > 0) {\n merge(this, options);\n }\n this.contentType = !isNOU(this.contentType) ? this.contentType : 'application/json; charset=utf-8';\n }\n /**\n * Send the request to server.\n *\n * @param {string|Object} data - Specifies the data that needs to be added to the request.\n * @returns {Promise} - Returns the response to a request.\n */\n Fetch.prototype.send = function (data) {\n var _this = this;\n var contentTypes = {\n 'application/json': 'json',\n 'multipart/form-data': 'formData',\n 'application/octet-stream': 'blob',\n 'application/x-www-form-urlencoded': 'formData'\n };\n try {\n if (isNOU(this.fetchRequest) && this.type === 'GET') {\n this.fetchRequest = new Request(this.url, { method: this.type });\n }\n else if (isNOU(this.fetchRequest)) {\n this.data = !isNOU(data) ? data : this.data;\n this.fetchRequest = new Request(this.url, {\n method: this.type,\n headers: { 'Content-Type': this.contentType },\n body: this.data\n });\n }\n var eventArgs = { cancel: false, fetchRequest: this.fetchRequest };\n this.triggerEvent(this['beforeSend'], eventArgs);\n if (eventArgs.cancel) {\n return null;\n }\n this.fetchResponse = fetch(this.fetchRequest);\n return this.fetchResponse.then(function (response) {\n _this.triggerEvent(_this['onLoad'], response);\n if (!response.ok) {\n throw response;\n }\n var responseType = 'text';\n for (var _i = 0, _a = Object.keys(contentTypes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (response.headers.get('Content-Type') && response.headers.get('Content-Type').indexOf(key) !== -1) {\n responseType = contentTypes[key];\n }\n }\n return response[responseType]();\n }).then(function (data) {\n _this.triggerEvent(_this['onSuccess'], data, _this);\n return data;\n }).catch(function (error) {\n var returnVal = {};\n if (_this.emitError) {\n _this.triggerEvent(_this['onFailure'], error);\n returnVal = Promise.reject(error);\n }\n return returnVal;\n });\n }\n catch (error) {\n return error;\n }\n };\n Fetch.prototype.triggerEvent = function (callback, data, instance) {\n if (!isNOU(callback) && typeof callback === 'function') {\n callback(data, instance);\n }\n };\n return Fetch;\n}());\nexport { Fetch };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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 *\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 *\n * @param {string} event - type of event triggered.\n * @returns {string} ?\n */\n Browser.getEvent = function (event) {\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 *\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 *\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 *\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n *\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * Check whether the browser on the iPad device is Safari or not\n *\n * @returns {boolean}\n */\n Browser.isSafari = function () {\n return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined'\n && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1\n && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1);\n };\n /**\n * To get the value based on provided key and regX\n *\n * @param {string} key ?\n * @param {RegExp} regX ?\n * @returns {Object} ?\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};\n if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true && !REGX_BROWSER.CHROME.test(navigator.userAgent)) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n }\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 * @param {string} uA ?\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 *\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 * @returns {boolean} ?\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 * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {boolean} ?\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 * @returns {string} ?\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 * @returns {string} ?\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 * @returns {string} ?\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 * @returns {string} ?\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 { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\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 *\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} intDebounce - Specifies at what interval given event listener should be triggered.\n * @returns {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[parseInt(i.toString(), 10)],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);\n }\n else {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n *\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 * @returns {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[parseInt(j.toString(), 10)] && 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[parseInt(j.toString(), 10)], 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 *\n * @param {any} element - Specifies the target html element to clear the events\n * @returns {void} ?\n */\n EventHandler.clearEvents = function (element) {\n var eventData = EventHandler.addOrGetEventData(element);\n var copyData = extend([], undefined, eventData);\n for (var i = 0; i < copyData.length; i++) {\n var parseValue = copyData[parseInt(i.toString(), 10)];\n element.removeEventListener(parseValue.name, parseValue.debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\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 * @returns {void} ?\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\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","/* eslint-disable @typescript-eslint/no-explicit-any */\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 * Inject required modules in component library\n *\n * @returns {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[parseInt(i.toString(), 10)];\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 && 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 *\n * @returns {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 * Returns the array of modules that are not loaded in the component library.\n *\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @returns {ModuleDeclaration[]} ?\n * @private\n */\n ModuleLoader.prototype.getNonInjectedModules = function (requiredModules) {\n var _this = this;\n return requiredModules.filter(function (module) { return !_this.isModuleLoaded(module.member); });\n };\n /**\n * Removes all unused modules\n *\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 *\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 *\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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n * @returns {void} ?\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\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.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n *\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 * @returns {void} ?\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 * @returns {void} ?\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 *\n * @param {Object} prop ?\n * @param {boolean} muteOnChange ?\n * @returns {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 * @returns {void} ?\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 *\n * @param {string} key ?\n * @param {Object} newValue ?\n * @param {Object} oldValue ?\n * @param {boolean} restrictServerDataBind ?\n * @returns {void} ?\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\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 ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];\n }\n }\n else {\n newChanges[\"\" + parentKey] = {};\n parent_1 = newChanges[\"\" + parentKey];\n newChanges[\"\" + parentKey][\"\" + key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[\"\" + actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar isDraggedObject = { isDragged: false };\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 _this.eleTop = 0;\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 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.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.isSafari() ? 'touchstart' : 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.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[\"\" + axis]] > element[client[\"\" + axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\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.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.isSafari() ? 'touchstart' : 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 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 /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\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 if (isChangeTouch) {\n evt.preventDefault();\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 var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\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 this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n this.eleTop = !isNaN(parseFloat(styles.top)) ? parseFloat(styles.top) - this.offset.top : 0;\n /* istanbul ignore next */\n // if (this.eleTop > 0) {\n // pos.top += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n pos.top -= this.parentScrollY;\n pos.left -= this.parentScrollX;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n pos.top += this.dragArea.scrollTop;\n }\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : 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 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 if (this.clone && evt.changedTouches && Browser.isDevice && Browser.isTouch) {\n evt.preventDefault();\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\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 var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\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 var styles = getComputedStyle(helperElement);\n if (this.dragArea) {\n if (this.enableAutoScroll) {\n this.setDragArea();\n }\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.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 > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.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 draEleTop;\n var draEleLeft;\n if (this.helperElement.classList.contains('e-treeview')) {\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);\n draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);\n }\n else {\n draEleTop = top - this.borderWidth.top;\n draEleLeft = left - this.borderWidth.left;\n }\n }\n else {\n if (this.dragArea) {\n var isDialogEle = this.helperElement.classList.contains('e-dialog');\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? isDialogEle ? (left - (iLeft - this.borderWidth.left)) :\n this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n }\n var marginTop = parseFloat(getComputedStyle(this.element).marginTop);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += marginTop;\n if (dTop < 0) {\n if ((marginTop + dTop) >= 0) {\n draEleTop = marginTop + dTop;\n }\n else {\n draEleTop -= marginTop;\n }\n }\n if (this.dragArea) {\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;\n }\n /* istanbul ignore next */\n // if(this.eleTop > 0) {\n // draEleTop += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n draEleTop += this.dragArea.scrollTop;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {\n this.helperElement.scrollIntoView();\n }\n var elements = document.querySelectorAll(':hover');\n if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n var scrollParent = this.getScrollParent(elements, false);\n if (this.elementInViewport(this.helperElement)) {\n this.getScrollPosition(scrollParent, draEleTop);\n }\n else if (!this.elementInViewport(this.helperElement)) {\n elements = [].slice.call(document.querySelectorAll(':hover'));\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n scrollParent = this.getScrollParent(elements, true);\n this.getScrollPosition(scrollParent, draEleTop);\n }\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.getScrollParent = function (node, reverse) {\n var nodeEl = reverse ? node.reverse() : node;\n var hasScroll;\n for (var i = nodeEl.length - 1; i >= 0; i--) {\n hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];\n if ((hasScroll === 'auto' || hasScroll === 'scroll')\n && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {\n return nodeEl[parseInt(i.toString(), 10)];\n }\n }\n hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];\n if (hasScroll === 'visible') {\n document.scrollingElement.style.overflow = 'auto';\n return document.scrollingElement;\n }\n };\n Draggable.prototype.getScrollPosition = function (nodeEle, draEleTop) {\n if (nodeEle && nodeEle === document.scrollingElement) {\n if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop\n && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n else if (nodeEle && nodeEle !== document.scrollingElement) {\n var docScrollTop = document.scrollingElement.scrollTop;\n var helperClientHeight = this.helperElement.clientHeight;\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - helperClientHeight + docScrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - helperClientHeight - docScrollTop)) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n };\n Draggable.prototype.getPathElements = function (evt) {\n var elementTop = evt.clientX > 0 ? evt.clientX : 0;\n var elementLeft = evt.clientY > 0 ? evt.clientY : 0;\n return document.elementsFromPoint(elementTop, elementLeft);\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\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 /**\n * @param {MouseEvent | TouchEvent} evt ?\n * @returns {void}\n * @private\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.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\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.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\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 = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : 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[parseInt(i.toString(), 10)];\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 if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {\n top = elementArea.top + document.scrollingElement.scrollTop;\n }\n else {\n top = elementArea.top;\n }\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + 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.pointerEvents || '';\n var isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version, 10) > 12;\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (document.scrollingElement && (!isdragscroll && !this.clone)) {\n var ele = document.scrollingElement;\n var isVerticalScroll = ele.scrollHeight > 0 && ele.scrollHeight > ele.clientHeight && ele.scrollTop > 0;\n var isHorrizontalScroll = ele.scrollWidth > 0 && ele.scrollWidth > ele.clientWidth && ele.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - ele.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - ele.scrollTop : pageY;\n }\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 Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", 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 __decorate([\n Property(false)\n ], Draggable.prototype, \"enableScrollHandler\", 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 { 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.isSafari() ? 'touchend' : 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.isSafari() ? 'touchend' : 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 *\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 * @param {KeyboardEventArgs} e ?\n * @returns {void} ?\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 *\n * @returns {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 *\n * @param {KeyboardEventsModel} newProp ?\n * @param {KeyboardEventsModel} oldProp ?\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {string} ?\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\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, isNullOrUndefined } 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 * @param {string} controlName ?\n * @param {Object} localeStrings ?\n * @param {string} locale ?\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 *\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 *\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n * @returns {void} ?\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 *\n * @param {string} prop - specifies the property for which localize text to be returned.\n * @returns {string} ?\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[\"\" + prop])) {\n return this.currentLocale[\"\" + prop];\n }\n else {\n return this.localeStrings[\"\" + prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n *\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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\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 */\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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\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 var isFirefox = (/Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\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 tDistance = _this.swipeSettings.swipeThresholdDistance;\n var eSwipeArgs = extend(undefined, _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 *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\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 *\n * @returns {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 *\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 *\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 /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n var 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 = this.updateChangeTouches(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 = this.updateChangeTouches(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 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 Touch.prototype.updateChangeTouches = function (evt) {\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\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","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nimport { isNullOrUndefined } from './util';\nvar removeTags = [\n 'script',\n 'style',\n 'iframe[src]',\n 'link[href*=\"javascript:\"]',\n 'object[type=\"text/x-scriptlet\"]',\n 'object[data^=\"data:text/html;base64\"]',\n 'img[src^=\"data:text/html;base64\"]',\n '[src^=\"javascript:\"]',\n '[dynsrc^=\"javascript:\"]',\n '[lowsrc^=\"javascript:\"]',\n '[type^=\"application/x-shockwave-flash\"]'\n];\nvar removeAttrs = [\n { attribute: 'href', selector: '[href*=\"javascript:\"]' },\n { attribute: 'background', selector: '[background^=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"javascript:\"]' },\n { attribute: 'style', selector: '[style*=\"expression(\"]' },\n { attribute: 'href', selector: 'a[href^=\"data:text/html;base64\"]' }\n];\nvar jsEvents = ['onchange',\n 'onclick',\n 'onmouseover',\n 'onmouseout',\n 'onkeydown',\n 'onload',\n 'onerror',\n 'onblur',\n 'onfocus',\n 'onbeforeload',\n 'onbeforeunload',\n 'onkeyup',\n 'onsubmit',\n 'onafterprint',\n 'onbeforeonload',\n 'onbeforeprint',\n 'oncanplay',\n 'oncanplaythrough',\n 'oncontextmenu',\n 'ondblclick',\n 'ondrag',\n 'ondragend',\n 'ondragenter',\n 'ondragleave',\n 'ondragover',\n 'ondragstart',\n 'ondrop',\n 'ondurationchange',\n 'onemptied',\n 'onended',\n 'onformchange',\n 'onforminput',\n 'onhaschange',\n 'oninput',\n 'oninvalid',\n 'onkeypress',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onmessage',\n 'onmousedown',\n 'onmousemove',\n 'onmouseup',\n 'onmousewheel',\n 'onoffline',\n 'onoine',\n 'ononline',\n 'onpagehide',\n 'onpageshow',\n 'onpause',\n 'onplay',\n 'onplaying',\n 'onpopstate',\n 'onprogress',\n 'onratechange',\n 'onreadystatechange',\n 'onredo',\n 'onresize',\n 'onscroll',\n 'onseeked',\n 'onseeking',\n 'onselect',\n 'onstalled',\n 'onstorage',\n 'onsuspend',\n 'ontimeupdate',\n 'onundo',\n 'onunload',\n 'onvolumechange',\n 'onwaiting',\n 'onmouseenter',\n 'onmouseleave',\n 'onstart',\n 'onpropertychange',\n 'oncopy',\n 'ontoggle',\n 'onpointerout',\n 'onpointermove',\n 'onpointerleave',\n 'onpointerenter',\n 'onpointerrawupdate',\n 'onpointerover',\n 'onbeforecopy',\n 'onbeforecut',\n 'onbeforeinput'\n];\nvar SanitizeHtmlHelper = /** @class */ (function () {\n function SanitizeHtmlHelper() {\n }\n SanitizeHtmlHelper.beforeSanitize = function () {\n return {\n selectors: {\n tags: removeTags,\n attributes: removeAttrs\n }\n };\n };\n SanitizeHtmlHelper.sanitize = function (value) {\n if (isNullOrUndefined(value)) {\n return value;\n }\n var item = this.beforeSanitize();\n var output = this.serializeValue(item, value);\n return output;\n };\n SanitizeHtmlHelper.serializeValue = function (item, value) {\n this.removeAttrs = item.selectors.attributes;\n this.removeTags = item.selectors.tags;\n this.wrapElement = document.createElement('div');\n this.wrapElement.innerHTML = value;\n this.removeXssTags();\n this.removeJsEvents();\n this.removeXssAttrs();\n var tempEleValue = this.wrapElement.innerHTML;\n this.removeElement();\n this.wrapElement = null;\n return tempEleValue.replace(/&/g, '&');\n };\n SanitizeHtmlHelper.removeElement = function () {\n // Removes an element's attibute to avoid html tag validation\n var nodes = this.wrapElement.children;\n for (var j = 0; j < nodes.length; j++) {\n var attribute = nodes[parseInt(j.toString(), 10)].attributes;\n for (var i = 0; i < attribute.length; i++) {\n this.wrapElement.children[parseInt(j.toString(), 10)].removeAttribute(attribute[parseInt(i.toString(), 10)].localName);\n }\n }\n };\n SanitizeHtmlHelper.removeXssTags = function () {\n var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n if (elements.length > 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n"],"names":["disableBlazorMode","isBlazorPlatform","createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","i","isUndefined","parseInt","toString","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","objCon","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","args","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","call","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","getElementsByTagName","querySelectorAll","blinks","l","len","reference","open","appendChild","cloneNode","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","match","enableBlazorMode","getElement","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","instances","_a","inst","addInstance","instance","uniqueID","ret","getBlazorCurrencySymbol","currencyCode","blazorCurrencyData","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","setCurrencyCode","defaultCurrencyCode","loadCldr","data_1","cldrData","enableRtl","status","rightToLeft","getNumericObject","type","numObject","IntlBase","getDependables","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getNumberDependable","currency","getCurrencySymbol","numericObject","getDefaultDateObject","mode","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","regExp","RegExp","ele","_b","classList_1","curClass","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","NodeList","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","select","selector","context","needsVDOM","querySelectId","selectAll","charRegex","idList","list","j","splitId","setId","closest","el","nodeType","matches","siblings","childNodes_1","childNodes","curNode","ELEMENT_NODE","getAttributeOrDefault","property","attrVal","isObj","getAttribute","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","includeInnerHTML","containsClass","getComponent","comp","getElementById","ej2_instances","getModuleName","removeChildInstance","childEle","getElementsByClassName","compName","compInstance","destroy","getObject","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","propertySetter","newValue","oldVal","saveChanges","complexGetter","complexSetter","complexFactoryGetter","complexFactorySetter","complexArrayGetter","defCollection","ignore","controlParent","ignoreCollectionWatch","extendFunc","descriptor","complexArrayDefinedCallback","configurable","defineProperty","complexArraySetter","isComplexArraySetter","oldValueCollection","newValCollection","complexArrayFactorySetter","complexArrayFactoryGetter","dFunc","prop","keyString","propName","getParentKey","newValueParse","model","getArrayModel","serverDataBind","ejsAction","isControlParent","arrayFunction","modelObject","Property","target","propertyDescriptor","set","get","enumerable","addPropertyCollection","Complex","ComplexFactory","Collection","CollectionFactory","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","_c","childType","tempValue","CreateBuilder","builderFunction","create","temp","curText","rippleEffect","rippleOptions","done","rippleModel","getRippleModel","rippleFlag","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","isCenterRipple","duration","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","enableRipple","isRipple","setGlobalAnimation","animationMode","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","exp","insideBraces","outputString","LINES","DBL_QUOTED_STR","cnt","matchStr","SPECIAL_CHAR","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","WORDIF","strs","HandleSpecialCharArrObj","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","WINDOWFUNC","WORDFUNC","ELSE_STMT","IF_OR_FOR","SINGLE_SLASH","SlashReplace","NameSpaceForspecialChar","addNS","ignoreList","NOT_NUMBER","NameSpaceArrObj","arrObjReg","tempStr","DOUBLE_SLASH","nameSpaceNew","quotes","ARR_OBJ","getRandomId","random","substr","templateString","compiler","engineObj","templateId","isStringTemplate","root","blazorId","blazorTemplates","HAS_SVG","HAS_ROW","updateBlazorTemplate","templateName","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","tempId","tempElement","length_1","setTemplateEngine","classObj","getTemplateEngine","initializeCSPTemplate","boundFunc","CSPTemplate","containerObject","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","map","getSymbolMatch","matchKeys_1","constructRegex","val","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","DJF","ERN","ETB","NAD","ZAR","XAF","GHS","XDR","AED","BHD","DZD","EGP","ILS","IQD","JOD","KMF","KWD","LBP","LYD","MAD","MRU","OMR","QAR","SAR","SDG","SOS","SSP","SYP","TND","YER","CLP","INR","TZS","EUR","AZN","RUB","BYN","ZMW","BGN","NGN","XOF","BDT","CNY","BAM","UGX","USD","CZK","GBP","DKK","KES","CHF","MVR","BTN","XCD","AUD","BBD","BIF","BMD","BSD","BWP","BZD","CAD","NZD","FJD","FKP","GIP","GMD","GYD","HKD","IDR","JMD","KYD","LRD","MGA","MOP","MUR","MWK","MYR","PGK","PHP","PKR","RWF","SBD","SCR","SEK","SGD","SHP","SLL","ANG","SZL","TOP","TTD","VUV","WST","ARS","BOB","BRL","COP","CRC","CUP","DOP","GTQ","HNL","MXN","NIO","PAB","PEN","PYG","UYU","VES","IRR","GNF","CDF","HTG","XPF","HRK","HUF","AMD","ISK","JPY","GEL","CVE","KZT","KHR","KPW","KRW","KGS","AOA","LAK","MZN","MKD","MNT","BND","MMK","NOK","NPR","AWG","SRD","PLN","AFN","STN","MDL","RON","UAH","LKR","ALL","RSD","TJS","THB","TMT","TRY","UZS","VND","TWD","HijriParser","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","floor","julilanOffset","julianNumber","b","c","d","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","dateCorrection","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","a","gDay","gMonth","gYear","Date","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","M","E","L","Z","G","DateFormat","dateFormat","culture","option","cldr","dependable","base","calendar","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch_1","char","weekday","monthIndex","days","designator","eText","era","timeZone","isNaN","intDateFormatter","options","dateParseRegex","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","getDay","curlength","substring","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","ishour","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numberMapper","currencySymbol","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","useGrouping","pData","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","replaceBlazorCurrency","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","p","lastIndexOf","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","isCustomFormat","decimalPart","toExponential","customPivotFormat","groupNumbers","nlead","nend","min","toPrecision","level1","sep","decimalSymbol","level2","toFixed","lead","ceil","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","tKeys","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","curObject","matchString","internalNumberParser","cultureOptions","toUpperCase","toLowerCase","tmatch","getZoneValue","tZone","cRegex","ival","parseRegex","NumberParser","numberParser","custom","symbolRegex","symbolpattern","getParsedNumber","isNegative","end","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","indexLocation","argument","successHandler","errorHandler","name","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","then","isJson","JSON","parse","dateReviver","catch","offIntlEvents","eventsArr","curContext","detectFunction","randomId","isRendered","boundedEvents_1","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","blazorCultureFormats","en-US","D","F","g","r","R","t","T","u","U","Y","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","dateConverterMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","formatSplit","customNumberFormat","integerPart","spaceCapture","spaceGrouping","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","dateObj","actualPattern","patternRegex","tLength","timeZonePattern","options_1","processSymbol","minFrac","numrericObject","curMatch","currencyFormatRegex","curCode","hasNegativePattern","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","diff","integer","firstDay","defaultFirstDay","iCulture","firstDayMapper","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","getTime","nday","'"," a","yy","EEEE","sun","mon","tue","wed","thu","fri","sat","curWithoutNumberRegex","$","%","-","0","1","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","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","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","currencies","displayName","symbol-alt-narrow","minimumGroupingDigits","symbols-numberSystem-latn","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","mapperDigits","currencypData","percentpData","percentnData","currencynData","decimalnData","decimalpData","C","P","N","A","headerRegex","defaultType","Ajax","async","contentType","emitError","url","send","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","statusText","getResponseHeader","responseHeaders","headers","exec","getAllResponseHeaders","header","Fetch","isNOU","contentTypes","application/json","multipart/form-data","application/octet-stream","application/x-www-form-urlencoded","fetchRequest","Request","method","Content-Type","triggerEvent","fetchResponse","fetch","response","ok","responseType","returnVal","callback","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","clientInfo","userAgent","version","language","navigator","getEvent","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","addOrGetEventData","__eventList","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","passive","some","copyData","parseValue","shift","trigger","eventProp","eventData_1","event_1","isColEName","Base","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","proxyToRaw","setProxyToRaw","toRaw","__extends","extendStatics","setPrototypeOf","__proto__","__","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","animationId","frameId","cancelAnimationFrame","GlobalAnimationMode","Disable","begin","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clean","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","modules","getNonInjectedModules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","action","parent_1","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","Component","needsID","isReactHybrid","isAngular","isReact","isVue","moduleLoader","localObserver","appendTo","enablePersistence","setPersistData","detachUnloadEvent","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","attachUnloadEvent","handleUnload","mergePersistData","ignoredComponents","schedule","diagram","PdfViewer","grid","richtexteditor","treegrid","gantt","chart","accumulationchart","query-builder","modulesRequired","moduleName","componentName","charAt","console","warn","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","this_1","newList","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","eleTop","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","scroll","vertical","horizontal","client","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","preventDefault","changedTouches","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","enableScrollHandler","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","width","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","enableAutoScroll","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","isDialogEle","tempDraEleTop","dragValue","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","overflow","nodeEle","docScrollTop","helperClientHeight","elementTop","elementLeft","elementsFromPoint","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","isVerticalScroll","clientWidth","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","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","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","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","now","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","tDistance","swipeSettings","swipeThresholdDistance","eSwipeArgs","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","children","localName","attr","hasAttribute"],"mappings":"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IAAO,MACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,MACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,MACPC,IAAO,MACPC,IAAO,MACPC,IAAO,KACPC,IAAO,MACPC,IAAO,MACPC,IAAO,IACPC,IAAO,IACPC,IAAO,MACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,OACPC,IAAO,KACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,OACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,KACPC,IAAO,MACPC,IAAO,IACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,MACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,OACPC,IAAO,OACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,OACPC,IAAO,KACPC,IAAO,KACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,MACPC,IAAO,KACPC,IAAO,IACPC,IAAO,MACPC,IAAO,MACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,KACPC,IAAO,OACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,MACPC,IAAO,IACPC,IAAO,MACPC,IAAO,OACPC,IAAO,OACPC,IAAO,MACPC,IAAO,IACPC,I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,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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"}