{"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/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 */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getValue(nameSpace, obj) {\n // eslint-disable-next-line\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n *\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 */\n// eslint-disable-next-line\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n // eslint-disable-next-line\n var start = obj || {};\n // eslint-disable-next-line\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n *\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 */\n// eslint-disable-next-line\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function getEnumValue(enumObject, enumValue) {\n // eslint-disable-next-line\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 if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n // eslint-disable-next-line\n if (!arguments_1[i]) {\n return \"continue\";\n }\n // eslint-disable-next-line\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (Array.isArray(clone) && clone.hasOwnProperty('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, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n *\n * @param {Object} 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 {Object} value - To check the object is undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\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 // eslint-disable-next-line\n var out;\n return function () {\n var _this = this;\n // eslint-disable-next-line\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n/**\n * To convert the object to string for query url\n *\n * @param {Object} data ?\n * @returns {string} ?\n * @private\n */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n throw 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[l]);\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[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // eslint-disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n *\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 */\n// eslint-disable-next-line\nexport function getInstance(element, component) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n // eslint-disable-next-line\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[i];\n }\n return ret;\n}\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 // eslint-disable-next-line\n if (!res.hasOwnProperty(prop[key])) {\n // eslint-disable-next-line\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 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 // eslint-disable-next-line\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[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\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 // eslint-disable-next-line\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 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 // eslint-disable-next-line\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 // eslint-disable-next-line\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\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 // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n // eslint-disable-next-line\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 // eslint-disable-next-line\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\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 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 for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n *\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\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[i].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[j].indexOf('#') > -1) {\n if (!list[j].match(/\\[.*\\]/)) {\n var splitId = list[j].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[j].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[j] = setId.join('.');\n }\n }\n }\n }\n idList[i] = 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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 */\n// eslint-disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // eslint-disable-next-line\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 */\n// eslint-disable-next-line\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","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\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 // eslint-disable-next-line\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 // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n *\n * @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 /* tslint:disable:no-any */\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 /* tslint:enable:no-any */\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n // tslint:disable-next-line:no-any\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\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n *\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 */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n // tslint:disable-next-line:no-any\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[i].classList[1].split('e-')[1];\n // tslint:disable-next-line:no-any\n var compInstance = getComponent(childEle[i], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\n","import { 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 */\n// eslint-disable-next-line\nfunction getObject(instance, curKey, defaultValue, type) {\n // eslint-disable-next-line\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n *\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 */\n// eslint-disable-next-line\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[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], 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 // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n *\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 // eslint-disable-next-line\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\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 */\n// eslint-disable-next-line\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (this.properties.hasOwnProperty(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 // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(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 // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('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 // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('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 // eslint-disable-next-line\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\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 // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n *\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 /* tslint:disable no-function-expression */\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 Array.prototype[dFunc].apply(prop, [newValue[i]]);\n var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[i], !this.controlParent, dFunc);\n this.serverDataBind(model_1, newValue[i], false, dFunc);\n }\n break;\n case 'pop':\n Array.prototype[dFunc].apply(prop);\n // eslint-disable-next-line\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\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// eslint-disable-next-line\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 * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n *\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 * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\n// eslint-disable-next-line\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 // eslint-disable-next-line\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n // eslint-disable-next-line\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n *\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 * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n *\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 // eslint-disable-next-line\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 }\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 /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n *\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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, 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;\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 if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * 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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 * 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 window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n 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 // eslint-disable-next-line\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[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n // tslint: enable: no-any\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 //tslint:disable-next-line\n Component.prototype.appendReactElement = function (element, container) {\n //No Code\n };\n ;\n //tslint:disable-next-line\n Component.prototype.renderReactTemplates = function () {\n //No Code\n };\n // eslint-disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n // eslint-disable-next-line\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // eslint-disable-next-line\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection\n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","/**\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} 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 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)) && (str.match('svg') === null)){\\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)) && (str.match('svg') === null)) {\\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 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 }\\n \";\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\";\" + condtion + \" return str;\";\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\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 return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, \n // eslint-disable-next-line\n 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 // eslint-disable-next-line\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, 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 // eslint-disable-next-line\n var fNameSpace = (helper && helper.hasOwnProperty(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 // tslint:disable-next-line\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 // eslint-disable-next-line\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 = '\"+' + 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) ? 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// eslint-disable-next-line\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n // eslint-disable-next-line\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\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","/**\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[i] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n /**\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/* tslint:disable no-any */\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 // eslint-disable-next-line\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 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 // eslint-disable-next-line\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n // eslint-disable-next-line\n ret += options.designator[desig];\n break;\n case 'G':\n // eslint-disable-next-line\n var dec = value.getFullYear() < 0 ? 0 : 1;\n // eslint-disable-next-line\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n // eslint-disable-next-line\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z':\n // eslint-disable-next-line\n var timezone = value.getTimezoneOffset();\n // eslint-disable-next-line\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n // eslint-disable-next-line\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","import { 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 integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n *\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 /* eslint-disable @typescript-eslint/no-explicit-any */\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 }\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);\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 // eslint-disable-next-line\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 * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\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 * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n *\n * @param {string} value ?\n * @param {number} min ?\n * @returns {string} ?\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","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/* tslint:disable no-any */\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 // eslint-disable-next-line\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[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var weekData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n var weekObject = parser.reverseObject(weekData);\n // tslint:enable\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n // eslint-disable-next-line\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(periodValur);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n // eslint-disable-next-line\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n // eslint-disable-next-line\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n // eslint-disable-next-line\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n // eslint-disable-next-line\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n // eslint-disable-next-line\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$', '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 // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n *\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n // eslint-disable-next-line\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n *\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 parseRegex = /^([^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 var numOptions;\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 // eslint-disable-next-line\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // eslint-disable-next-line\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","import { 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 }];\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[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\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[index];\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 // eslint-disable-next-line\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 * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n // eslint-disable-next-line\n return this.boundedEvents.hasOwnProperty(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","import { 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';\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\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*[0#\\ ]*)(\\.[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 = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n '1-alt-variant': 'Common Era'\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y'\n }\n }\n },\n 'islamic': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Muh.',\n '2': 'Saf.',\n '3': 'Rab. I',\n '4': 'Rab. II',\n '5': 'Jum. I',\n '6': 'Jum. II',\n '7': 'Raj.',\n '8': 'Sha.',\n '9': 'Ram.',\n '10': 'Shaw.',\n '11': 'Dhuʻl-Q.',\n '12': 'Dhuʻl-H.'\n },\n 'narrow': {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n '11': '11',\n '12': '12'\n },\n 'wide': {\n '1': 'Muharram',\n '2': 'Safar',\n '3': 'Rabiʻ I',\n '4': 'Rabiʻ II',\n '5': 'Jumada I',\n '6': 'Jumada II',\n '7': 'Rajab',\n '8': 'Shaʻban',\n '9': 'Ramadan',\n '10': 'Shawwal',\n '11': 'Dhuʻl-Qiʻdah',\n '12': 'Dhuʻl-Hijjah'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'AH'\n },\n 'eraAbbr': {\n '0': 'AH'\n },\n 'eraNarrow': {\n '0': 'AH'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y G',\n 'long': 'MMMM d, y G',\n 'medium': 'MMM d, y G',\n 'short': 'M/d/y GGGGG'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y G',\n 'yyyy': 'y G',\n 'yyyyM': 'M/y GGGGG',\n 'yyyyMd': 'M/d/y GGGGG',\n 'yyyyMEd': 'E, M/d/y GGGGG',\n 'yyyyMMM': 'MMM y G',\n 'yyyyMMMd': 'MMM d, y G',\n 'yyyyMMMEd': 'E, MMM d, y G',\n 'yyyyMMMM': 'MMMM y G',\n 'yyyyQQQ': 'QQQ y G',\n 'yyyyQQQQ': 'QQQQ y G'\n }\n }\n }\n },\n 'timeZoneNames': {\n 'hourFormat': '+HH:mm;-HH:mm',\n 'gmtFormat': 'GMT{0}',\n 'gmtZeroFormat': 'GMT'\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n }\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###'\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n 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 /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n *\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 // eslint-disable-next-line\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 return val.replace(IntlBase.defaultCurrency, sym);\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 // eslint-disable-next-line\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n *\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 = spaceGrouping ? integerPart.replace(/,/g, '') : integerPart.replace(/,/g, '').replace(/\\ $/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n // eslint-disable-next-line\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[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n // eslint-disable-next-line\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n // eslint-disable-next-line\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(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // eslint-disable-next-line\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 /**\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[x] + 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 * @return {Promise} ?\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n 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 header;\n // eslint-disable-next-line\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n // eslint-disable-next-line\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ /]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ /]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ /]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ /]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ /]([\\w.]+)/i,\n SAFARI: /(safari)[ /]([\\w.]+)/i,\n WEBKIT: /(webkit)[ /]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n *\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 // eslint-disable-next-line\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 {boolean}\n */\n Browser.getEvent = function (event) {\n // eslint-disable-next-line\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 * 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 = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\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[i],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[i], debounceListener);\n }\n else {\n element.addEventListener(event[i], 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[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n *\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;\n var copyData;\n // eslint-disable-next-line\n eventData = EventHandler.addOrGetEventData(element);\n // eslint-disable-next-line\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\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","/**\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[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n *\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 * 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","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\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 // eslint-disable-next-line\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[i]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[i]];\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 // eslint-disable-next-line\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};\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 positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\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 /* tslint:disable no-any */\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.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, 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 /* tslint:disable no-any */\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[i]))) {\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.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, 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.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* 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 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 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.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, 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.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n 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 // tslint:disable-next-line:max-func-body-length\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, 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 /* tslint:disable no-any */\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.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.dragArea) {\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 ? this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\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 draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\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 /* 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 var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.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 * @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.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n 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 ? 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[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = 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 if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\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 /* tslint:disable no-any */\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 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.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n // eslint-disable-next-line\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\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 // eslint-disable-next-line\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};\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 _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n // eslint-disable-next-line\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed\n /**\n *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\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 var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n // eslint-disable-next-line\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = 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 // eslint-disable-next-line\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';\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 'onblur',\n 'oncanplay',\n 'oncanplaythrough',\n 'onchange',\n 'onclick',\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 'onerror',\n 'onerror',\n 'onfocus',\n 'onformchange',\n 'onforminput',\n 'onhaschange',\n 'oninput',\n 'oninvalid',\n 'onkeydown',\n 'onkeypress',\n 'onkeyup',\n 'onload',\n 'onloadeddata',\n 'onloadedmetadata',\n 'onloadstart',\n 'onmessage',\n 'onmousedown',\n 'onmousemove',\n 'onmouseout',\n 'onmouseover',\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 'onsubmit',\n 'onsuspend',\n 'ontimeupdate',\n 'onundo',\n 'onunload',\n 'onvolumechange',\n 'onwaiting',\n 'onmouseenter',\n 'onmouseleave',\n 'onmousewheel',\n 'onstart',\n 'onpropertychange'\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 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 return tempEleValue;\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[j].attributes;\n for (var i = 0; i < attribute.length; i++) {\n this.wrapElement.children[j].removeAttribute(attribute[i].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 // eslint-disable-next-line\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","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","arguments_1","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","later","clearTimeout","setTimeout","queryParams","array","keys_2","push","encodeURIComponent","join","isObjectArray","parser","toString","call","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","ele","_b","classList_1","curClass","RegExp","contains","add","removeClass","flag","classList_2","classArr","index","splice","remove","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","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","model_1","getArrayModel","serverDataBind","model","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","enableVersionBasedPersistence","versionBasedStatePersistence","compile","template","helper","ignorePrefix","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","LINES","DBL_QUOTED_STR","exp","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","blazorId","blazorTemplates","HAS_SVG","HAS_ROW","updateBlazorTemplate","templateName","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","tempId","tempElement","length_1","setTemplateEngine","classObj","getTemplateEngine","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","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","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","toExponential","groupNumbers","nlead","nend","min","toPrecision","level1","sep","decimalSymbol","level2","toFixed","lead","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","parseInt","getDateObject","setMilliseconds","tKeys","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","toLowerCase","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","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","boundedEvents_1","exports","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","header","headers","exec","getAllResponseHeaders","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","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","shift","trigger","eventProp","eventData_1","event_1","isColEName","Base","isRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","filter","__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","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","begin","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","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","randomId","needsID","isReactHybrid","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","appendReactElement","container","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","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","draEleTop","draEleLeft","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","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","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflow","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":"yDASA,SAAgBA,KACZC,IAAmB,EAWvB,QAAgBC,GAAeC,EAAeC,GAC1C,GAAIC,GAAaD,CAEjB,OADAC,GAAWC,YAAQC,IACZ,IAAKC,SAASC,UAAUC,KAAKC,MAAMR,EAAeE,IAS7D,QAAgBO,GAAaC,GACzB,GAAIC,GAEAC,EAAM,GAAIC,aAAY,IACVC,OAAOC,UAAYD,OAAOE,QAChCC,gBAAgBL,EAC1B,IAAIM,GAAS,MAAQC,EAAaP,GAE9BQ,EAAiB,SAAUC,GACvBA,EAAMC,SAAWR,QAAgC,gBAAfO,GAAME,MAAqBF,EAAME,KAAKC,QAAU,IAAMH,EAAME,OAASL,IACvGR,IACAC,KAKR,OAFAG,QAAOW,iBAAiB,UAAWL,GAAgB,GACnDN,OAAOY,YAAYR,EAAQ,KACpBP,EAAS,WACZG,OAAOa,oBAAoB,UAAWP,GACtCV,EAAUU,EAAiBF,MAASd,IAY5C,QAAgBwB,GAASC,EAAWC,GAIhC,IAAK,GAFDC,GAAQD,EACRE,EAASH,EAAUI,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAIC,MAAM,KAC3DC,EAAI,EAAGA,EAAIH,EAAOR,SAAWY,EAAYL,GAAQI,IACtDJ,EAAQA,EAAMC,EAAOG,GAEzB,OAAOJ,GAYX,QAAgBM,GAASR,EAAWE,EAAOD,GACvC,GAKIK,GAEAG,EAPAC,EAAOV,EAAUI,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAIC,MAAM,KAE9DM,EAAQV,MAERW,EAAUD,EAEVhB,EAASe,EAAKf,MAElB,KAAKW,EAAI,EAAGA,EAAIX,EAAQW,IACpBG,EAAMC,EAAKJ,GACPA,EAAI,IAAMX,EACViB,EAAQH,OAAiBlC,KAAV2B,KAA2BA,EAErCW,EAAkBD,EAAQH,MAC/BG,EAAQH,OAEZG,EAAUA,EAAQH,EAEtB,OAAOE,GAWX,QAAgBG,GAAab,EAAKQ,SACvBR,GAAIQ,GAUf,QAAgBM,GAASd,GACrB,GAAIe,KACJ,QAASH,EAAkBZ,IAAQA,EAAIgB,cAAgBD,EAAOC,YAWlE,QAAgBC,GAAaC,EAAYC,GAErC,MAAOD,GAAWC,GAUtB,QAAgBC,GAAM5B,EAAQ6B,GAC1B,IAAKT,EAAkBS,GAKnB,IAAK,GAJDC,GAAU9B,EACV+B,EAAWF,EAGNG,EAAK,EAAGC,EAFNC,OAAOjB,KAAKY,GAESG,EAAKC,EAAO/B,OAAQ8B,IAAM,CACtD,GAAIhB,GAAMiB,EAAOD,EACZZ,GAAkBU,EAAiB,aAA4C,IAArCA,EAAiB,UAAEK,QAAQnB,KACrEM,EAASS,EAASf,MAASoB,MAAMC,QAAQN,EAASf,IAInDc,EAAQd,GAAOe,EAASf,GAHxBsB,EAAOR,EAAQd,GAAMc,EAAQd,GAAMe,EAASf,IAAM,IAkBlE,QAAgBsB,GAAOC,EAAQC,EAAOC,EAAQC,GAC1C,GAAIC,GAASJ,GAA4B,gBAAXA,GAAsBA,KAChDrC,EAAS0C,UAAU1C,MACnBwC,KACAxC,GAAkB,EAuCtB,KAAK,GADD2C,GAAcD,UACT/B,EAAI,EAAGA,EAAIX,EAAQW,KArCd,SAAUA,GAEpB,IAAKgC,EAAYhC,GACb,MAAO,UAGX,IAAIiC,GAAOD,EAAYhC,EACvBqB,QAAOjB,KAAK6B,GAAMC,QAAQ,SAAU/B,GAChC,GAEIgC,GAFAC,EAAMN,EAAO3B,GACbkC,EAAOJ,EAAK9B,GAEZmC,EAAiBf,MAAMC,QAAQa,IAASd,MAAMC,QAAQY,IAASC,EAAKhD,SAAW+C,EAAI/C,OAEnFkD,GAAoBC,OAAgBJ,YAAeK,QAAWH,EAC9DT,IAAQU,IAAsB9B,EAAS4B,IAASd,MAAMC,QAAQa,IAC1D5B,EAAS4B,IACTF,EAAQC,MAEJb,MAAMC,QAAQW,IAAUA,EAAMO,eAAe,kBAC7CjB,EAAOU,KAAWE,EAAMR,GAGxBC,EAAO3B,GAAOsB,EAAOU,KAAWE,EAAMR,KAK1CM,EAAQK,IAAaJ,GAAOf,OAAOjB,KAAKiC,GAAMhD,OAAS+C,MACvDN,EAAO3B,GAAOsB,KAAWU,EAAOE,EAAMR,IAI1CC,EAAO3B,GAAOkC,KAMdrC,EAEZ,OAAO8B,GASX,QAAgBvB,GAAkBX,GAC9B,WAAiB3B,KAAV2B,GAAiC,OAAVA,EASlC,QAAgBK,GAAYL,GACxB,WAAQ,KAAuBA,EASnC,QAAgB+C,GAAYC,GACxB,MAAOA,GAAc,IAAMC,KAU/B,QAAgBC,GAASC,EAAeC,GAEpC,GAAIC,EACJ,OAAO,YACH,GAAIC,GAAQC,KAERC,EAAOrB,UACPsB,EAAQ,WAER,MADAJ,GAAM,KACCF,EAAc1E,MAAM6E,EAAOE,GAEtCE,cAAaL,GACbA,EAAMM,WAAWF,EAAOL,IAWhC,QAAgBQ,GAAYpE,GAGxB,IAAK,GAFDqE,MAEKtC,EAAK,EAAGuC,EADNrC,OAAOjB,KAAKhB,GACS+B,EAAKuC,EAAOrE,OAAQ8B,IAAM,CACtD,GAAIhB,GAAMuD,EAAOvC,EACjBsC,GAAME,KAAKC,mBAAmBzD,GAAO,IAAMyD,mBAAmB,GAAKxE,EAAKe,KAE5E,MAAOsD,GAAMI,KAAK,KAStB,QAAgBC,GAAclE,GAC1B,GAAImE,GAAS1C,OAAOlD,UAAU6F,QAC9B,OAA2B,mBAAvBD,EAAOE,KAAKrE,IACkB,oBAA1BmE,EAAOE,KAAKrE,EAAM,IAc9B,QAAgBsE,GAAqBC,EAAOC,GACxC,GAAIC,GAAOF,CACX,OAAIE,KAASD,KAGJC,IAASC,WAAaD,IAIpBH,EAAqBG,EAAKE,WAAYH,GAUrD,QAAgBI,GAAWC,GACvB,IACI,KAAM,IAAIC,OAAMD,GAEpB,MAAOE,GAEH,KAAMA,GAAEF,QAAU,KAAOE,EAAEC,OAWnC,QAAgBC,GAAMC,EAASC,GAC3B,GAAIC,GAAMV,SAASW,cAAc,OAC7BC,KAAWC,MAAMlB,KAAKK,SAASc,qBAAqB,QAAQ,GAAGC,iBAAiB,sBAChFC,KAAYH,MAAMlB,KAAKK,SAASc,qBAAqB,QAAQ,GAAGC,iBAAiB,eACrF,IAAIC,EAAOjG,OACP,IAAK,GAAIkG,GAAI,EAAGC,EAAMF,EAAOjG,OAAQkG,EAAIC,EAAKD,IAC1CL,EAAMvB,KAAK2B,EAAOC,GAG1B,IAAIE,GAAY,EACZlF,GAAkBwE,KAClBA,EAAcpG,OAAO+G,KAAK,GAAI,QAAS,oCAE3CV,EAAIW,YAAYb,EAAQc,WAAU,GAClC,KAAK,GAAI5F,GAAI,EAAGwF,EAAMN,EAAM7F,OAAQW,EAAIwF,EAAKxF,IACzCyF,GAAaP,EAAMlF,GAAG6F,SAE1Bd,GAAYT,SAASwB,MAAM,+BAAiCL,EAAY,gBAAkBT,EAAIe,UAC1F,8EACJhB,EAAYT,SAAS0B,QACrBjB,EAAYkB,OAEZ,IAAIC,GAAWC,YAAY,WACnBpB,EAAYqB,QACZrB,EAAYF,QACZE,EAAYiB,QACZK,cAAcH,KAEnB,IACH,OAAOnB,GASX,QAAgBuB,GAAW1G,GACvB,GAAIkC,GAASlC,EAAQ,EACrB,OAAIkC,GAAOyE,MAAM,yDACNzE,EAEJA,EAAS,KAQpB,QAAgB0E,KACZ7I,IAAmB,EAQvB,QAAgB6E,KACZ,MAAO7E,IASX,QAAgB8I,GAAW3B,GAEvB,MAAMA,aAAmB4B,QAASlE,KAAejC,EAAkBuE,EAAa,OAGzEA,EAFIR,SAASqC,SAAS7B,EAAa,MAAGR,SAAU,KAAMsC,YAAYC,wBAAyB,MAAMC,gBAa5G,QAAgBC,GAAYjC,EAASkC,GAEjC,GAAIC,GAA6B,mBAAY3C,SAAS4C,cAAcpC,GAAWA,CAC/E,IAAImC,EAAKE,IACL,IAAK,GAAIhG,GAAK,EAAGiG,EAAKH,EAAKE,IAAYhG,EAAKiG,EAAG/H,OAAQ8B,IAAM,CACzD,GAAIkG,GAAOD,EAAGjG,EACd,IAAIkG,YAAgBL,GAChB,MAAOK,GAInB,MAAO,MAUX,QAAgBC,GAAYxC,EAASyC,GAEjC,GAAIN,GAA6B,mBAAY3C,SAAS4C,cAAcpC,GAAWA,CAC3EmC,GAAKE,IACLF,EAAKE,IAAWxD,KAAK4D,GAGrBN,EAAKE,KAAcI,GAU3B,QAAgBC,KACZ,GAAwB,mBAAZ7I,QAAZ,CAIA,GAAIF,GAAM,GAAIC,aAAY,EAE1B,QADgBC,OAAOC,UAAYD,OAAOE,QACzBC,gBAAgBL,IAOrC,QAASO,GAAaP,GAElB,IAAK,GADDgJ,GAAM,GACDzH,EAAI,EAAGA,EAAI,EAAGA,IACnByH,IAAQzH,EAAI,IAAM,IAAMvB,EAAIuB,EAEhC,OAAOyH,GCnIX,QAAgBC,GAAwBC,GACpC,MAAOlI,GAASkI,GAAgB,GAAIC,IChKxC,QAAgBC,GAAWC,GACvBC,iBAAiBD,EACjBE,GAAaC,OAAO,wBAA0BC,OAAUH,mBAQ5D,QAAgBI,GAAgBR,GAC5BS,sBAAsBT,EACtBK,GAAaC,OAAO,wBAA0BN,aAAgBS,wBAQlE,QAAgBC,KAEZ,IAAK,GADDjJ,MACK+B,EAAK,EAAGA,EAAKY,UAAU1C,OAAQ8B,IACpC/B,EAAK+B,GAAMY,UAAUZ,EAEzB,KAAK,GAAIiG,GAAK,EAAGkB,EAASlJ,EAAMgI,EAAKkB,EAAOjJ,OAAQ+H,IAAM,CACtD,GAAIzH,GAAM2I,EAAOlB,EACjB3F,GAAO8G,GAAU5I,MAAS,IASlC,QAAgB6I,GAAUC,OACP,KAAXA,IAAqBA,GAAS,GAClCC,cAAcD,EACdT,GAAaC,OAAO,wBAA0BO,UAAWE,gBAW7D,QAAgBC,GAAiBT,EAAQU,GAErC,GAAIC,GAAYC,WAASC,eAAeR,GAAUL,EAAQ,IAAI,GAAMc,GAAO,IAEvEC,EAAaH,WAASC,eAAeR,GAAUL,EAAQ,IAAIc,GAAO,IAClEE,EAAYzJ,EAAS,yBAA0BoJ,GAC/CM,EAAc3G,IAAa/C,EAAS,gBAAiBoJ,GAAapJ,EAAS,wBAA0ByJ,EAAWL,GAChHO,EAAUN,WAASO,iBAAiBT,GAAQ,UAAWM,EAAWL,GAAW,EACjF,OAAOpH,GAAO0H,EAAaL,WAASQ,cAAcF,GAAS,EAAM,IAAI,IAASG,cAAiBT,WAASU,iBAAiBP,KAW7H,QAAgBQ,GAAoBvB,EAAQwB,GAExC,GAAIb,GAAYC,WAASC,eAAeR,GAAUL,EAAQ,IAAI,EAE9D,OAAOY,YAASa,kBAAkBd,EAAUe,cAAeF,GAU/D,QAAgBG,GAAqBC,GAEjC,MAAOhB,YAASC,eAAeR,GAAU,GAAIuB,GAAM,GAAOd,GAAO,ICjRrE,QAAgB/D,GAAc8E,EAASC,GACnC,GAAIlF,GAAWmF,GAAQC,KAAKH,GAAWzF,SAAS6F,gBAAgB,6BAA8BJ,GAAWzF,SAASW,cAAc8E,EAChI,YAA4B,OACjBjF,GAEXA,EAAQiB,UAAaiE,EAAWjE,UAAYiE,EAAWjE,UAAY,OACtC9H,KAAzB+L,EAAWI,YACXtF,EAAQsF,UAAYJ,EAAWI,eAEbnM,KAAlB+L,EAAWK,KACXvF,EAAQuF,GAAKL,EAAWK,QAEFpM,KAAtB+L,EAAWM,QACXxF,EAAQyF,aAAa,QAASP,EAAWM,YAEpBrM,KAArB+L,EAAWQ,OACXC,EAAW3F,EAASkF,EAAWQ,OAE5B1F,GAUX,QAAgB4F,GAASC,EAAUC,GAE/B,IAAK,GADDC,GAAYC,EAAaF,GACpBzJ,EAAK,EAAGiG,EAAKuD,EAAUxJ,EAAKiG,EAAG/H,OAAQ8B,IAE5C,IAAK,GADD4J,GAAM3D,EAAGjG,GACJ6J,EAAK,EAAGC,EAAcJ,EAAWG,EAAKC,EAAY5L,OAAQ2L,IAAM,CACrE,GAAIZ,GAAYa,EAAYD,EAC5B,IAAIvK,EAASsK,GAAM,CACf,GAAIG,GAAWzL,EAAS,uBAAwBsL,EAC5CxK,GAAkB2K,GAClBhL,EAAS,uBAAwBkK,EAAWW,GAEtC,GAAII,QAAO,MAAQf,EAAY,MAAO,KAAKF,KAAKgB,IACtDhL,EAAS,uBAAwBgL,EAAW,IAAMd,EAAWW,OAI5DA,GAAIF,UAAUO,SAAShB,IACxBW,EAAIF,UAAUQ,IAAIjB,GAKlC,MAAOO,GAUX,QAAgBW,GAAYX,EAAUC,GAElC,IAAK,GADDC,GAAYC,EAAaF,GACpBzJ,EAAK,EAAGiG,EAAKuD,EAAUxJ,EAAKiG,EAAG/H,OAAQ8B,IAAM,CAClD,GAAI4J,GAAM3D,EAAGjG,GACToK,EAAO9K,EAASsK,EAEpB,IADgBQ,EAAO9L,EAAS,uBAAwBsL,GAAyB,KAAlBA,EAAIX,UAE/D,IAAK,GAAIY,GAAK,EAAGQ,EAAcX,EAAWG,EAAKQ,EAAYnM,OAAQ2L,IAAM,CACrE,GAAIZ,GAAYoB,EAAYR,EAC5B,IAAIO,EAAM,CACN,GACIE,GADYhM,EAAS,uBAAwBsL,GACxBhL,MAAM,KAC3B2L,EAAQD,EAASnK,QAAQ8I,IACd,IAAXsB,GACAD,EAASE,OAAOD,EAAO,GAE3BxL,EAAS,uBAAwBuL,EAAS5H,KAAK,KAAMkH,OAGrDA,GAAIF,UAAUe,OAAOxB,IAKrC,MAAOO,GASX,QAASG,GAAaF,GAClB,GAAIC,KAOJ,OANuB,gBAAZD,GACPC,EAAUlH,KAAKiH,GAGfC,EAAYD,EAETC,EASX,QAAgBgB,GAAU/G,GACtB,GAAIiG,GAAMjG,CACV,OAAiC,KAAzBiG,EAAIe,MAAMC,YAAqBhB,EAAIiB,YAAc,EAW7D,QAAgBC,GAAQC,EAAcC,EAAWC,GAE7C,IAAK,GADDC,GAAU/H,SAASgI,yBACdnL,EAAK,EAAGiG,EAAK8E,EAAc/K,EAAKiG,EAAG/H,OAAQ8B,IAAM,CACtD,GAAI4J,GAAM3D,EAAGjG,EACbkL,GAAQ1G,YAAYoF,GAMxB,MAJAoB,GAAUI,aAAaF,EAASF,EAAUK,mBACtCJ,GACAK,EAAcN,GAEXD,EAWX,QAAgBQ,GAAOR,EAAcC,EAAWC,GAE5C,IAAK,GADDC,GAAU/H,SAASgI,yBACdnL,EAAK,EAAGiG,EAAK8E,EAAc/K,EAAKiG,EAAG/H,OAAQ8B,IAAM,CACtD,GAAI4J,GAAM3D,EAAGjG,EACbkL,GAAQ1G,YAAYoF,GAMxB,MAJAoB,GAAUxG,YAAY0G,GAClBD,GACAK,EAAcN,GAEXD,EAQX,QAASO,GAAc1B,GACJA,EAAI1F,iBAAiB,UAC3BnD,QAAQ,SAAU4C,GACvB,GAAI6H,GAASrI,SAASW,cAAc,SACpC0H,GAAOC,KAAO9H,EAAQiB,UACtBzB,SAASuI,KAAKlH,YAAYgH,GAC1BG,EAAOH,KAWf,QAAgBG,GAAOhI,GACnB,GAAIP,GAAaO,EAAQP,UACzB,IAAIA,EACA,MAAOA,GAAWwI,YAAYjI,GAUtC,QAAgB8G,GAAO9G,GACnB,GAAIP,GAAaO,EAAQP,UACzByI,IAAaC,YAAYnI,GACzBP,EAAWwI,YAAYjI,GAW3B,QAAgB2F,GAAW3F,EAAS2F,GAGhC,IAAK,GADDM,GAAMjG,EACD3D,EAAK,EAAGC,EAFNC,OAAOjB,KAAKqK,GAEStJ,EAAKC,EAAO/B,OAAQ8B,IAAM,CACtD,GAAIhB,GAAMiB,EAAOD,EACjB,IAAIV,EAASsK,GAAM,CACf,GAAImC,GAAO/M,CACC,cAARA,IACA+M,EAAO,YAEXnC,EAAIN,WAAWyC,GAAQzC,EAAWtK,OAGlC4K,GAAIR,aAAapK,EAAKsK,EAAWtK,IAGzC,MAAO4K,GAYX,QAAgBoC,GAAOC,EAAUC,EAASC,GAGtC,WAFgB,KAAZD,IAAsBA,EAAU/I,UACpC8I,EAAWG,EAAcH,GAClBC,EAAQnG,cAAckG,GAYjC,QAAgBI,GAAUJ,EAAUC,EAASC,GAIzC,WAHgB,KAAZD,IAAsBA,EAAU/I,UACpC8I,EAAWG,EAAcH,GACVC,EAAQhI,iBAAiB+H,GAU5C,QAASG,GAAcH,GACnB,GAAIK,GAAY,8DAChB,IAAIL,EAAS7G,MAAM,YAAc6G,EAAS7G,MAAMkH,GAAY,CAExD,IAAK,GADDC,GAASN,EAASrN,MAAM,KACnBC,EAAI,EAAGA,EAAI0N,EAAOrO,OAAQW,IAAK,CAEpC,IAAK,GADD2N,GAAOD,EAAO1N,GAAGD,MAAM,KAClB6N,EAAI,EAAGA,EAAID,EAAKtO,OAAQuO,IAC7B,GAAID,EAAKC,GAAGtM,QAAQ,MAAQ,IACnBqM,EAAKC,GAAGrH,MAAM,UAAW,CAC1B,GAAIsH,GAAUF,EAAKC,GAAG7N,MAAM,IAC5B,IAAI8N,EAAQ,GAAGtH,MAAM,QAAUsH,EAAQ,GAAGtH,MAAMkH,GAAY,CACxD,GAAIK,GAAQH,EAAKC,GAAG7N,MAAM,IAC1B+N,GAAM,GAAKA,EAAM,GAAGhO,QAAQ,IAAK,SAAY,KAC7C6N,EAAKC,GAAKE,EAAMjK,KAAK,MAKrC6J,EAAO1N,GAAK2N,EAAK9J,KAAK,KAE1B,MAAO6J,GAAO7J,KAAK,KAEvB,MAAOuJ,GAUX,QAAgBW,GAAQjJ,EAASsI,GAC7B,GAAIY,GAAKlJ,CACT,IAA0B,kBAAfkJ,GAAGD,QACV,MAAOC,GAAGD,QAAQX,EAEtB,MAAOY,GAAsB,IAAhBA,EAAGC,UAAgB,CAC5B,GAAIC,GAAQF,EAAIZ,GACZ,MAAOY,EAEXA,GAAKA,EAAGzJ,WAEZ,MAAO,MASX,QAAgB4J,GAASrJ,GAGrB,IAAK,GAFDqJ,MAEKhN,EAAK,EAAGiN,EADA7M,MAAMpD,UAAUgH,MAAMlB,KAAKa,EAAQP,WAAW8J,YACnBlN,EAAKiN,EAAa/O,OAAQ8B,IAAM,CACxE,GAAImN,GAAUF,EAAajN,EACvBmN,GAAQL,WAAavH,KAAK6H,cAAgBzJ,IAAYwJ,GACtDH,EAASxK,KAAK2K,GAGtB,MAAOH,GAWX,QAAgBK,GAAsB1J,EAAS2J,EAAU7O,GACrD,GAAI8O,GACAC,EAAQlO,EAASqE,EAgBrB,OAdI4J,GADAC,EACUlP,EAAS,cAAgBgP,EAAU3J,GAGnCA,EAAQ8J,aAAaH,GAE/BlO,EAAkBmO,IAAY9O,IACzB+O,EAID7J,EAAQ2F,WAAWgE,GAAY7O,EAH/BkF,EAAQyF,aAAakE,EAAU7O,EAAMoE,YAKzC0K,EAAU9O,GAEP8O,EAUX,QAAgBG,GAAkB/J,EAAS0F,OACzBvM,KAAVuM,GACAnJ,OAAOjB,KAAKoK,GAAOtI,QAAQ,SAAU/B,GAEjC2E,EAAQgH,MAAM3L,GAAOqK,EAAMrK,KAavC,QAAgB0K,IAAU/F,EAASgK,EAAYC,GAC3CrE,GAAU5F,GAAUgK,GACpBxD,GAAaxG,GAAUiK,GAU3B,QAAgBb,IAAQpJ,EAASsI,GAE7B,GAAIc,GAAUpJ,EAAQoJ,SAAWpJ,EAAQkK,mBAAqBlK,EAAQmK,qBACtE,OAAIf,GACOA,EAAQjK,KAAKa,EAASsI,IAG6C,OAAhE9L,QAAQ2C,KAAKK,SAASe,iBAAiB+H,GAAWtI,GAWpE,QAAgBoK,IAAiBnE,EAAKhF,GAClCgF,EAAIhF,UAAYA,EAWpB,QAAgBoJ,IAAcpE,EAAKX,GAC/B,MAAI3J,GAASsK,GAEF,GAAII,QAAO,MAAQf,EAAY,MAAO,KAAKF,KAAKa,EAAIN,WAAWL,WAG/DW,EAAIF,UAAUO,SAAShB,GAYtC,QAAgBxE,IAAUd,EAASjD,GAC/B,MAAIpB,GAASqE,GACLjD,EACOJ,QAAeqD,GAAS,OADnC,GAKOA,EAAQc,UAAU/D,GCzLjC,QAAgBuN,IAAanI,EAAMoI,GAC/B,GAAI9H,GACAvH,EACA+K,EAAsB,gBAAT9D,GAAoB3C,SAASgL,eAAerI,GAAQA,CACrE,KAAKjH,EAAI,EAAGA,EAAI+K,EAAIwE,cAAclQ,OAAQW,IAEtC,GADAuH,EAAWwD,EAAIwE,cAAcvP,GACT,gBAATqP,IAEP,GAAIA,IADW9H,EAASiI,gBAEpB,MAAOjI,OAKX,IAAIA,YAAoB8H,GACpB,MAAO9H,GAcvB,QAAgBkI,IAAoB3K,GAGhC,IAAK,GADD4K,MAAcvK,MAAMlB,KAAKa,EAAQ6K,uBAAuB,cACnD3P,EAAI,EAAGA,EAAI0P,EAASrQ,OAAQW,IAAK,CACtC,GAAI4P,GAAWF,EAAS1P,GAAG6K,UAAU,GAAG9K,MAAM,MAAM,GAEhD8P,EAAeT,GAAaM,EAAS1P,GAAI4P,EACxC3P,GAAY4P,IACbA,EAAaC,WClTzB,QAASC,IAAUxI,EAAUyI,EAAQC,EAAcrH,GAK/C,MAHKrB,GAASyC,WAAWtH,eAAesN,IAAazI,EAASyC,WAAWgG,YAAmBpH,KACxFrB,EAASyC,WAAWgG,GAAUpS,EAAegL,GAAOrB,EAAUyI,EAAQC,KAEnE1I,EAASyC,WAAWgG,GAc/B,QAASE,IAAe3I,EAAUyI,EAAQC,EAAcrH,EAAMuH,EAAUC,GAGpE,IAAK,GAFDtO,MACA0D,EAAMyK,EAAeA,EAAa5Q,OAAS,EACtCW,EAAI,EAAGA,EAAIwF,EAAKxF,IAAK,CAC1B,GAAIqQ,GAAUzH,CAId,IAHIwH,IACAC,EAAUzH,EAAKqH,EAAajQ,GAAIuH,IAEhC4I,EAAU,CACV,GAAI9I,GAAOzJ,EAAeyS,GAAU9I,EAAUyI,MAAY,GAC1D3I,GAAKiJ,cAAcL,EAAajQ,IAAI,GACpC8B,EAAO6B,KAAK0D,OAGZvF,GAAO6B,KAAK/F,EAAeyS,GAAU9I,EAAUyI,EAAQC,EAAajQ,IAAI,KAGhF,MAAO8B,GASX,QAASyO,IAAeN,EAAcD,GAClC,MAAO,YAKH,MAHK7M,MAAK6G,WAAWtH,eAAesN,KAChC7M,KAAK6G,WAAWgG,GAAUC,GAEvB9M,KAAK6G,WAAWgG,IAU/B,QAASQ,IAAeP,EAAcD,GAClC,MAAO,UAAUS,GACb,GAAItN,KAAK6G,WAAWgG,KAAYS,EAAU,CAEtC,GAAIC,GAASvN,KAAK6G,WAAWtH,eAAesN,GAAU7M,KAAK6G,WAAWgG,GAAUC,CAChF9M,MAAKwN,YAAYX,EAAQS,EAAUC,GACnCvN,KAAK6G,WAAWgG,GAAUS,IAatC,QAASG,IAAcX,EAAcD,EAAQpH,GACzC,MAAO,YACH,MAAOmH,IAAU5M,KAAM6M,EAAQC,EAAcrH,IAWrD,QAASiI,IAAcZ,EAAcD,EAAQpH,GACzC,MAAO,UAAU6H,GACbV,GAAU5M,KAAM6M,EAAQC,EAAcrH,GAAM0H,cAAcG,IAWlE,QAASK,IAAqBb,EAAcD,EAAQpH,GAChD,MAAO,YACH,GAAIyH,GAAUzH,KAEd,OAAIzF,MAAK6G,WAAWtH,eAAesN,GACxB7M,KAAK6G,WAAWgG,GAGhBD,GAAU5M,KAAM6M,EAAQC,EAAcI,IAWzD,QAASU,IAAqBd,EAAcD,EAAQpH,GAChD,MAAO,UAAU6H,GACb,GAAIJ,GAAUzH,EAAK6H,EAAUtN,KAC7B4M,IAAU5M,KAAM6M,EAAQC,EAAcI,GAASC,cAAcG,IAUrE,QAASO,IAAmBf,EAAcD,EAAQpH,GAC9C,MAAO,YACH,GAAI1F,GAAQC,IAEZ,KAAKA,KAAK6G,WAAWtH,eAAesN,GAAS,CACzC,GAAIiB,GAAgBf,GAAe/M,KAAM6M,EAAQC,EAAcrH,GAAM,EACrEzF,MAAK6G,WAAWgG,GAAUiB,EAE9B,GAAIC,OAAkCjT,KAAvBkF,KAAKgO,eAA+BhO,KAAKgO,cAAcC,uBAC/DjO,KAAKiO,qBAeZ,OAbKjO,MAAK6G,WAAWgG,GAAQtN,eAAe,SAAYwO,IACnD,OAAQ,OAAOhP,QAAQ,SAAUmP,GAC9B,GAAIC,IACA1R,MAAO2R,GAA4BF,EAAYrB,EAAQpH,EAAM1F,EAAM8G,WAAWgG,IAAS5R,KAAK8E,GAC5FsO,cAAc,EAElBnQ,QAAOoQ,eAAevO,EAAM8G,WAAWgG,GAASqB,EAAYC,KAI/DnO,KAAK6G,WAAWgG,GAAQtN,eAAe,mBACxCrB,OAAOoQ,eAAetO,KAAK6G,WAAWgG,GAAS,kBAAoBpQ,OAAO,IAEvEuD,KAAK6G,WAAWgG,IAU/B,QAAS0B,IAAmBzB,EAAcD,EAAQpH,GAC9C,MAAO,UAAU6H,GACbtN,KAAKwO,sBAAuB,CAC5B,IAAIC,GAAqB1B,GAAe/M,KAAM6M,EAAQC,EAAcrH,GAAM,GACtEiJ,EAAmB3B,GAAe/M,KAAM6M,EAAQS,EAAU7H,GAAM,EACpEzF,MAAKwO,sBAAuB,EAC5BxO,KAAKwN,YAAYX,EAAQ6B,EAAkBD,GAC3CzO,KAAK6G,WAAWgG,GAAU6B,GAUlC,QAASC,IAA0B7B,EAAcD,EAAQpH,GACrD,MAAO,UAAU6H,GAEb,GAAImB,GAAqBzO,KAAK6G,WAAWtH,eAAesN,GAAU7M,KAAK6G,WAAWgG,GAAUC,EACxF4B,EAAmB3B,GAAe/M,KAAM6M,EAAQS,EAAU7H,GAAM,GAAM,EAC1EzF,MAAKwN,YAAYX,EAAQ6B,EAAkBD,GAC3CzO,KAAK6G,WAAWgG,GAAU6B,GAUlC,QAASE,IAA0B9B,EAAcD,EAAQpH,GACrD,MAAO,YACH,GAAIyH,GAAUzH,KAEd,KAAKzF,KAAK6G,WAAWtH,eAAesN,GAAS,CACzC,GAAIiB,GAAgBf,GAAe/M,KAAM6M,EAAQC,EAAcI,GAAS,EACxElN,MAAK6G,WAAWgG,GAAUiB,EAE9B,MAAO9N,MAAK6G,WAAWgG,IAW/B,QAASuB,IAA4BS,EAAOhC,EAAQpH,EAAMqJ,GAEtD,MAAO,YAEH,IAAK,GADDxB,MACKtP,EAAK,EAAGA,EAAKY,UAAU1C,OAAQ8B,IACpCsP,EAAStP,GAAMY,UAAUZ,EAE7B,IAAI+Q,GAAY/O,KAAKgP,SAAWhP,KAAKiP,eAAiB,IAAMpC,EAAS,IAAMA,EAAS,GACpF,QAAQgC,GACJ,IAAK,OACD,IAAK,GAAIhS,GAAI,EAAGA,EAAIyQ,EAASpR,OAAQW,IAAK,CACtCuB,MAAMpD,UAAU6T,GAAO3T,MAAM4T,GAAOxB,EAASzQ,IAC7C,IAAIqS,GAAUC,GAAcJ,GAAaD,EAAK5S,OAAS,GAAIoR,EAASzQ,IAAKmD,KAAKgO,cAAea,EAC7F7O,MAAKoP,eAAeF,EAAS5B,EAASzQ,IAAI,EAAOgS,GAErD,KACJ,KAAK,MACDzQ,MAAMpD,UAAU6T,GAAO3T,MAAM4T,EAE7B,IAAIO,GAAQF,GAAcJ,EAAYD,EAAK5S,OAAQ,MAAO8D,KAAKgO,cAAea,EAC9E7O,MAAKoP,eAAeC,GAASC,UAAW,QAAS,EAAOT,GAGhE,MAAOC,IAWf,QAASK,IAAcJ,EAAWtS,EAAO8S,EAAiBC,GACtD,GAAIC,GAAcV,CAClB,IAAIQ,IACAE,KACAA,EAAYV,GAAatS,EACrBA,GAA0B,gBAAVA,IAAoB,CAEpCgT,EAAYV,GAAiB,UAAIS,EAGzC,MAAOC,GAcX,QAAgBC,IAAS5C,GACrB,MAAO,UAAU6C,EAAQ3S,GACrB,GAAI4S,IACAC,IAAKxC,GAAeP,EAAc9P,GAClC8S,IAAK1C,GAAeN,EAAc9P,GAClC+S,YAAY,EACZ1B,cAAc,EAGlBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAK4S,GACnCI,GAAsBL,EAAQ3S,EAAK,OAAQ8P,IAenD,QAAgBmD,IAAQnD,EAAcrH,GAClC,MAAO,UAAUkK,EAAQ3S,GACrB,GAAI4S,IACAC,IAAKnC,GAAcZ,EAAc9P,EAAKyI,GACtCqK,IAAKrC,GAAcX,EAAc9P,EAAKyI,GACtCsK,YAAY,EACZ1B,cAAc,EAGlBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAK4S,GACnCI,GAAsBL,EAAQ3S,EAAK,cAAe8P,EAAcrH,IAcxE,QAAgByK,IAAezK,GAC3B,MAAO,UAAUkK,EAAQ3S,GACrB,GAAI4S,IACAC,IAAKjC,MAAyB5Q,EAAKyI,GACnCqK,IAAKnC,MAAyB3Q,EAAKyI,GACnCsK,YAAY,EACZ1B,cAAc,EAGlBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAK4S,GACnCI,GAAsBL,EAAQ3S,EAAK,iBAAmByI,IAe9D,QAAgB0K,IAAWrD,EAAcrH,GACrC,MAAO,UAAUkK,EAAQ3S,GACrB,GAAI4S,IACAC,IAAKtB,GAAmBzB,EAAc9P,EAAKyI,GAC3CqK,IAAKjC,GAAmBf,EAAc9P,EAAKyI,GAC3CsK,YAAY,EACZ1B,cAAc,EAGlBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAK4S,GACnCI,GAAsBL,EAAQ3S,EAAK,UAAW8P,EAAcrH,IAcpE,QAAgB2K,IAAkB3K,GAC9B,MAAO,UAAUkK,EAAQ3S,GACrB,GAAI4S,IACAC,IAAKlB,MAA8B3R,EAAKyI,GACxCqK,IAAKlB,MAA8B5R,EAAKyI,GACxCsK,YAAY,EACZ1B,cAAc,EAGlBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAK4S,GACnCI,GAAsBL,EAAQ3S,EAAK,aAAeyI,IAY1D,QAAgBnG,MACZ,MAAO,UAAUqQ,EAAQ3S,GACrB,GAAIqT,IACAR,IAAK,SAAUvC,GACX,GAAIgD,GAAWtQ,KAAK6G,WAAW7J,EAC/B,IAAIsT,IAAahD,EAAU,CACvB,GAAIiD,GAAeC,GAAiBxQ,KAAMhD,IACZ,IAA1BF,EAAYwT,IACZC,EAAarG,QAAQ7N,oBAAoBkU,EAAaE,OAAQH,GAElEC,EAAarG,QAAQ/N,iBAAiBoU,EAAaE,OAAQnD,GAC3DtN,KAAK6G,WAAW7J,GAAOsQ,IAG/BwC,IAAK1C,OAAetS,GAAWkC,GAC/B+S,YAAY,EACZ1B,cAAc,EAElBnQ,QAAOoQ,eAAeqB,EAAQ3S,EAAKqT,GACnCL,GAAsBL,EAAQ3S,EAAK,UA2B3C,QAAgB0T,IAAsBC,IActC,QAASX,IAAsBL,EAAQ3S,EAAK4T,EAAc9D,EAAcrH,GAChE3I,EAAY6S,EAAOkB,YACnBlB,EAAOkB,UACHC,SACAC,gBACAC,YACAC,UACAC,aACAC,oBACAC,gBACAC,gBAIR1B,EAAOkB,SAASD,EAAe,KAAKpQ,MAChC8Q,aAActU,EACd8P,aAAcA,EACdrH,KAAMA,IAGVkK,EAAOkB,SAASD,EAAe,SAASpQ,KAAKxD,GASjD,QAASuU,IAAqB1N,GAC1B,GAAI/G,EAAY+G,EAAU7I,UAAUwW,eAAgB,CAChD3N,EAAU7I,UAAUwW,eAChB3K,cAAgB4K,mBAAqBvJ,IAAK,WACtClI,KAAK0R,iBAAkB,EACvB1R,KAAKyR,gBAAgBjR,KAAKlC,KAAW0B,KAAK6G,iBAIlD,KAAK,GADD8K,GAAM,UACD3T,EAAK,EAAGiG,EAAK/F,OAAOjB,KAAK4G,EAAU7I,UAAU6V,UAAW7S,EAAKiG,EAAG/H,OAAQ8B,IA6B7E,IAAK,GA5BDhB,GAAMiH,EAAGjG,GA4BJ6J,EAAK,EAAG+J,EAAK/N,EAAU7I,UAAU6V,SAAS7T,GAAM6K,EAAK+J,EAAG1V,OAAQ2L,KA3B3D,SAAUiH,GAChB6C,EAAI5K,KAAK/J,GACT6G,EAAU7I,UAAUwW,cAAc1C,EAAKwC,cAAgB,SAAU7U,GAC7D,GAAIoV,KACJjU,GAAMiU,EAAWN,GAAqBzC,EAAKrJ,OAC3ChJ,EAAMoV,EACN,IAAIC,EAWJ,OANIA,GAJCD,EAAUH,gBAICG,EAAUJ,gBAHVnT,KAAWuT,EAAUhL,eAKrC7G,KAAK6G,WAAWiI,EAAKwC,cAAgBQ,EACrCD,EAAUhL,cACVgL,EAAUJ,mBACVI,EAAUH,iBAAkB,EACrB1R,MAIX6D,EAAU7I,UAAUwW,cAAc1C,EAAKwC,cAAgB,SAAU7U,GAE7D,MADAuD,MAAK6G,WAAWiI,EAAKwC,cAAgB7U,EAC9BuD,OAKJ4R,EAAG/J,IAK1B,MAAOhE,GAAU7I,UAAUwW,cAS/B,QAAgBO,IAAclO,GAC1B,GAAImO,GAAkB,SAAUrQ,GAE5B,MADA3B,MAAK2B,QAAUA,EACR3B,KAcX,OAZuB,UAAU2B,GAU7B,MARKqQ,GAAgBhX,UAAUuE,eAAe,aAC1CyS,EAAgBhX,UAAYuW,GAAqB1N,IACvBoO,OAAS,WAC/B,GAAIC,GAAO5T,QAAe0B,KAAK6G,WAE/B,OADA7G,MAAK6G,cACE,GAAIhD,GAAUqO,EAAMlS,KAAK2B,WAGjC,GAAIqQ,GAAgBrQ,IAYnC,QAAS6O,IAAiBtG,EAASuG,GAE/B,IAA4C,IAAxCvG,EAAQ3K,eAAe,aACvB,OAAS2K,QAASA,EAASuG,OAAQA,EAGnC,IAAI0B,GAAU7V,EAAS,WAAY4N,EAInC,OAHIiI,KACA1B,EAAS0B,EAAU,IAAM1B,GAEtBD,GAAiBlU,EAAS,YAAa4N,GAAUuG,GClUhE,QAAgB2B,IAAazQ,EAAS0Q,EAAeC,GACjD,GAAIC,GAAcC,GAAeH,EACjC,QAA+B,IAA3BE,EAAYE,gBAAoD3X,KAA3ByX,EAAYE,aAA6BC,gCAGlF/Q,EAAQyF,aAAa,cAAe,QACpCyC,GAAa3B,IAAIvG,EAAS,YAAagR,IAAiB1R,OAAQU,EAAS0Q,cAAeE,IACxF1I,GAAa3B,IAAIvG,EAAS,UAAWiR,IAAmB3R,OAAQU,EAAS0Q,cAAeE,EAAaD,KAAMA,IAC3GzI,GAAa3B,IAAIvG,EAAS,aAAckR,IAAsB5R,OAAQU,EAAS0Q,cAAeE,IAC1FO,GAAQC,WACRlJ,GAAa3B,IAAIvG,EAAS,gBAAiBkR,IAAsB5R,OAAQU,EAAS0Q,cAAeE,eAGjG5Q,EAAQqR,gBAAgB,eACxBnJ,GAAapB,OAAO9G,EAAS,YAAagR,IAC1C9I,GAAapB,OAAO9G,EAAS,UAAWiR,IACxC/I,GAAapB,OAAO9G,EAAS,aAAckR,IAC3ChJ,GAAapB,OAAO9G,EAAS,gBAAiBkR,MAStD,QAASL,IAAeH,GAQpB,OANIpI,SAAUoI,GAAiBA,EAAcpI,SAAWoI,EAAcpI,SAAW,KAC7E8D,OAAQsE,GAAiBA,EAActE,OAASsE,EAActE,OAAS,KACvE0E,WAAYJ,GAAiBA,EAAcI,WAC3CQ,eAAgBZ,GAAiBA,EAAcY,eAC/CC,SAAUb,GAAiBA,EAAca,SAAWb,EAAca,SAAW,KAWrF,QAASP,IAAcnR,GACnB,GAAImO,GAAUnO,EAAS,OACnByI,EAAWjK,KAAKqS,cAAcpI,SAC9BtI,EAAUsI,EAAWW,EAAQ+E,EAAQ1F,GAAY0F,CACrD,OAAKhO,GAAY3B,KAAKqS,eAAiBzH,EAAQ+E,EAAQ3P,KAAKqS,cAActE,SAA1E,CAGA,GAAIoF,GAASxR,EAAQyR,wBACjBC,EAAU7R,EAAE8R,MAAQnS,SAASoS,KAAKC,WAClCC,EAAUjS,EAAEkS,QAAWvS,SAASoS,KAAKI,WAAaxS,SAASyS,gBAC3DzS,SAASyS,gBAAgBD,UAAYxS,SAASoS,KAAKI,WACnDL,EAAQO,KAAKC,IAAID,KAAKE,IAAIV,EAAUF,EAAOa,MAAOH,KAAKE,IAAIV,EAAUF,EAAOc,QAC5EP,EAAQG,KAAKC,IAAID,KAAKE,IAAIN,EAAUN,EAAOe,KAAML,KAAKE,IAAIN,EAAUN,EAAOgB,SAC3EC,EAASP,KAAKQ,KAAKf,EAAQA,EAAQI,EAAQA,GAC3CY,EAAoB,EAATF,EAAa,KACxBG,EAAIlB,EAAUF,EAAOa,KAAOI,EAC5BI,EAAIf,EAAUN,EAAOe,IAAME,CAC3BpU,MAAKqS,eAAiBrS,KAAKqS,cAAcY,iBACzCsB,EAAI,EACJC,EAAI,EACJF,EAAW,QAEf3S,EAAQ+F,UAAUQ,IAAI,WACtB,IAGIuM,GAAgB3S,EAAc,OAASmF,UAAW,mBAAoBE,OAF7D,UAAYmN,EAAW,YAAcA,EAAW,UAAYC,EAAI,WAAaC,EAAI,2BAD/ExU,KAAKqS,cAAca,SAASrS,WAEF,OAEzCc,GAAQa,YAAYiS,GACpBjZ,OAAOkZ,iBAAiBD,GAAeE,iBAAiB,WACxDF,EAAc9L,MAAMiM,UAAY,WAC5BjT,IAAY3B,KAAKiB,QACjB4I,GAAa3B,IAAIvG,EAAS,aAAckR,IAAsB5R,OAAQjB,KAAKiB,OAAQoR,cAAerS,KAAKqS,iBAU/G,QAASO,IAAgBpR,GACrBqT,GAAarT,EAAGxB,MASpB,QAAS6S,IAAmBrR,GACxBqT,GAAarT,EAAGxB,MAUpB,QAAS6U,IAAarT,EAAGsT,GACrB,GAAI5B,GAAW4B,EAAUzC,cAAca,SACnCvD,EAAUnO,EAAS,OACnByI,EAAW6K,EAAUzC,cAAcpI,SACnCtI,EAAUsI,EAAWW,EAAQ+E,EAAQ1F,GAAY0F,CACrD,IAAKhO,KAAYA,IAAsD,IAA3CA,EAAQsF,UAAU9I,QAAQ,aAAtD,CAGA,GAAI4W,GAAiB1K,EAAU,oBAAqB1I,GAChD8S,EAAgBM,EAAeA,EAAe7Y,OAAS,EACvDuY,KACAA,EAAc9L,MAAMqM,QAAU,OAE9BF,EAAU7T,SAAWU,GACrBkI,GAAapB,OAAO9G,EAAS,aAAckR,IAG/CzS,WAAW,WACHqU,GAAiBA,EAAcrT,YAC/BqT,EAAcrT,WAAWwI,YAAY6K,GAEpC9S,EAAQ6K,uBAAuB,oBAAoBtQ,QACpDyF,EAAQ+F,UAAUe,OAAO,YAEzBqM,EAAUxC,MACVwC,EAAUxC,KAAK9Q,IAEpB0R,IASP,QAAgB+B,IAAaC,GAEzB,MADAxC,mBAAkBwC,EACXxC,kBCxXX,QAAgByC,IAA8B7P,GAC1C8P,+BAA+B9P,ECsBnC,QAAgB+P,IAAQC,EAAUC,EAAQC,GACtC,GAGIC,GAAS,YAFOC,GAAQJ,EADd,OACiCC,EAAQC,GAEX,w2CAE5C,OADS,IAAIza,UAJC,OAIiB0a,GACrBxa,KAAKsa,GAUnB,QAASG,IAAQC,EAAKpZ,EAAWgZ,EAAQC,GACrC,GAAII,GAAW,EAIXC,KACAC,EAAUH,EAAIvS,MAAM,yBACpB2S,EAAc,EAOlB,OANID,IACAA,EAAQ/W,QAAQ,SAAUtC,GACtBsZ,EAActZ,EAAME,QAAQ,SAAU,KACtCgZ,EAAMA,EAAIhZ,QAAQF,EAAOsZ,KAG1BJ,EAAIhZ,QAAQqZ,GAAO,IAAIrZ,QAAQsZ,GAAgB,QAAUtZ,QAAQuZ,GAExE,SAAU9S,EAAO+S,EAAKhD,EAAQiD,GAC1B,GAAIC,GAAe,WACftL,EAAUoL,EAAI/S,MAAMkT,GAExB,IAAIvL,EAAS,CACT,GAAIwL,GAAQxL,EAAQ,EACpB,IAAIyL,GAAYzP,KAAKoP,GAEjBA,EAAM,OAASA,EAAIxZ,QAAQoO,EAAQ,GAAIwL,EAAM5Z,QAAQ8Z,GAAM,SAAUd,GAEjE,MADAA,GAAMA,EAAIe,OACHC,GAAahB,GAAOiB,GAAO7P,KAAK4O,KAAsC,IAA5BE,EAAU1X,QAAQwX,GAAcpZ,EAAWsZ,EAAWL,MACrG,yBAEL,IAAIqB,GAAQ9P,KAAKoP,GAElBA,EAAM,MAAQA,EAAIxZ,QAAQoO,EAAQ,GAAIwL,EAAM5Z,QAAQma,GAAQ,SAAUC,GAClE,MAAOC,IAAwBD,EAAMxa,EAAWsZ,EAAWL,MACzD,yBAEL,IAAIyB,GAASlQ,KAAKoP,GAAM,CAEzB,GAAIe,GAAUnM,EAAQ,GAAGnO,MAAM,OAG/BuZ,GAAM,MAAQA,EAAIxZ,QAAQoO,EAAQ,GAAI,SAAUoM,GAK5C,MAJAtB,GAAUrV,KAAK0W,EAAQ,IACvBrB,EAAUrV,KAAK0W,EAAQ,GAAK,SAGrB,SAFPtB,GAAsB,GAEM,QAAUA,EAAW,MAAQe,GAAaO,EAAQ,IAAI,EAAM3a,EAAWsZ,EAAWL,GAAgB,aAAeI,EAAW,OACvJ,QAAUsB,EAAQ,GAAK,KAAOP,GAAaO,EAAQ,IAAI,EAAM3a,EAAWsZ,EAAWL,GAClF,KAAOI,EAAW,aAAesB,EAAQ,GAAK,UAAYtB,EAAW,yBAE1E,CAED,GAAIwB,GAAQjB,EAAIvZ,MAAM,KAElBya,EAAc9B,GAAUA,EAAOhW,eAAe6X,EAAM,IAAM,QAAU,QACxEC,GAAc,KAAKtQ,KAAKqQ,EAAM,IAAM,GAAKC,CACzC,IAAIC,GAAUvM,EAAQ,GAAGnO,MAAM,IACL,KAAtBmO,EAAQ,GAAG7O,QAAiB,OAAS6K,KAAKuQ,EAAQ,KAAQ,UAAYvQ,KAAKuQ,EAAQ,MACnFvM,EAAQ,GAAqB,WAAfsM,EAA0B9a,EAAY,IAAMwO,EAAQ,GAAKA,EAAQ,GAEnF,IAAIwM,GAAY,WACZC,EAAS,QACTC,IAAW1Q,KAAKoP,IAAQqB,EAAOzQ,KAAKoP,IAAQoB,EAAUxQ,KAAKoP,GACxC,gBACFpP,KAAKoP,KAElBA,EAAM,OAAwB,WAAfkB,EAA0B,GAAKA,GAAclB,EAAIxZ,QAAQoO,EAAQ,GAAIwL,EAAM5Z,QAAQ+a,GAAU,SAAUX,GAClH,MAAOC,IAAwBD,EAAMxa,EAAWsZ,EAAWL,MACzD,OAIVW,EAAM,QAAyB,WAAfkB,EAA0B,GAAKA,GAC3ClB,EAAIxZ,QAAQ4Z,EAAOI,GAAa5L,EAAQ,GAAGpO,QAAQ,iBAAkB,IAAMJ,EAAY,KAAKI,QAAQ,qBAAsB,WAA4B,WAAf0a,EAAyC9a,EAAWsZ,EAAWL,IACtM,UAIPmC,IAAU5Q,KAAKoP,GAEpBA,EAAM,MAAQA,EAAIxZ,QAAQgb,GAAW,6BAG9BxB,EAAI/S,MAAMwU,IAEjBzB,EAAMA,EAAIxZ,QAAQib,GAAW,4BAExBvB,EAAatP,KAAKoP,IAEnBA,EAAI/S,MAAMyU,MACV1B,EAAM2B,GAAa3B,IAEvBA,EAAM,KAAO4B,GAAwB5B,GAAkC,IAA5BN,EAAU1X,QAAQgY,GAAc5Z,EAAWsZ,GAAa,QAM/FM,EAFAA,EAAI/S,MAAMyU,IAEJ,KAAOE,GADb5B,EAAM2B,GAAa3B,IACoD,IAA5BN,EAAU1X,QAAQgY,GAAc5Z,EAAWsZ,GAAa,OAI7F,KAAOc,GAAaR,EAAIxZ,QAAQ,MAAO,IAAMJ,EAAY,MAAmC,IAA5BsZ,EAAU1X,QAAQgY,GAAc5Z,EAAWsZ,EAAWL,GAAgB,IAGpJ,OAAOW,KAYf,QAASQ,IAAahB,EAAKqC,EAAOzb,EAAW0b,EAAYzC,GACrD,OAASwC,GAAWE,GAAWnR,KAAK4O,KAAoD,IAA3CsC,EAAW9Z,QAAQwX,EAAI/Y,MAAM,KAAK,KAAe4Y,EAAwCG,EAAxBpZ,EAAY,IAAMoZ,EAUpI,QAASwC,IAAgBxC,EAAKqC,EAAOzb,EAAW0b,GAC5C,GAAIG,GAAY,SAChB,QAASJ,GAAWE,GAAWnR,KAAK4O,KACW,IAA3CsC,EAAW9Z,QAAQwX,EAAI/Y,MAAM,KAAK,KAAgBwb,EAAUrR,KAAK4O,GAAiCA,EAAxBpZ,EAAY,IAAMoZ,EAcpG,QAASoC,IAAwBpC,EAAKqC,EAAOzb,EAAW0b,GACpD,MAASD,KAAWE,GAAWnR,KAAK4O,KAAoD,IAA3CsC,EAAW9Z,QAAQwX,EAAI/Y,MAAM,KAAK,IAAcL,EAAY,KAAOoZ,EAAMA,EAG1H,QAASmC,IAAaO,GASlB,MALIA,GAFAA,EAAQjV,MAAMkV,IAEJD,EAGAA,EAAQ1b,QAAQkb,GANjB,QAkBjB,QAASb,IAAwBrB,EAAK4C,EAActb,EAAMuY,GAGtD,GAFAG,EAAMA,EAAIe,OACO,cACD3P,KAAK4O,GAcjB,MAAOA,EAbP,IAAI6C,GAAS,OAKb,OAJgB,WACFzR,KAAK4O,KACfA,EAAMoC,GAAwBpC,GAA6B,IAAvB1Y,EAAKkB,QAAQwX,GAAc4C,EAActb,GAAQ,MAErFwb,GAAQ1R,KAAK4O,GACNwC,GAAgBxC,GAAO6C,EAAOzR,KAAK4O,KAAiC,IAAvB1Y,EAAKkB,QAAQwX,GAAc4C,EAActb,GAGtF0Z,GAAahB,GAAO6C,EAAOzR,KAAK4O,KAAiC,IAAvB1Y,EAAKkB,QAAQwX,GAAc4C,EAActb,EAAMuY,GCnP5G,QAAgBkD,MACZ,MAAO,IAAM7E,KAAK8E,SAAS9X,SAAS,IAAI+X,OAAO,EAAG,GAYtD,QAAgBvD,IAAQwD,EAAgBtD,EAAQC,GAC5C,GAAIsD,GAAWC,GAAU1D,QAAQwD,EAAgBtD,EAAQC,EAEzD,OAAO,UAAUvZ,EAAM4H,EAAWmL,EAAUgK,EAAYC,EAAkB1Q,EAAO5G,GAC7E,GAAIhD,GAASma,EAAS7c,EAAM4H,EAAWmL,EAAUrN,EAEjD,IAAItC,MAAe4Z,EAAkB,CACjC,GACIC,GAAWF,EADAN,IAKf,IAHKS,GAAgBH,KACjBG,GAAgBH,OAEf5b,EAAkBmL,GAanBtM,EAAqB,iBAAIid,EACzBC,GAAgBH,GAAYxY,KAAKvE,OAZjC,KAAK,GAAI+B,GAAK,EAAGC,EADNC,OAAOjB,KAAKkc,GAAgBH,GAAYzQ,IACnBvK,EAAKC,EAAO/B,OAAQ8B,IAAM,CACtD,GAAIhB,GAAMiB,EAAOD,EAVN,sBAWPhB,GAA4Bf,EAAKe,KACjCmc,GAAgBH,GAAYzQ,GAAOvL,GAAOf,EAAKe,IAZxC,qBAcPA,IACAkc,EAAWC,GAAgBH,GAAYzQ,GAAOvL,IAS1D,MAAoB,gBAAbgS,GAA8BlN,EAAc,MAAQoF,GAAIgS,EAAUjS,UAAW,wBAE/EnF,EAAc,OAASoF,GAAIgS,EAAUjS,UAAW,uBAEzD,GAAsB,gBAAXtI,GAAqB,CAC5B,GAAIya,GAAQrS,KAAKpI,GAEb,OADIiJ,EAAM9F,EAAc,OAASc,UAAWjE,KACjCuM,UAGX,IAAItD,GAAM9F,EAAeuX,GAAQtS,KAAKpI,GAAU,QAAU,OAAUiE,UAAWjE,GAC/E,OAAOiJ,GAAIsD,WAIf,MAAOvM,IAanB,QAAgB2a,IAAqBN,EAAYO,EAAcrN,EAAMsN,EAASC,GAC1E,GAAIpa,IAAY,CAEZ7D,OAAgB,SAAEke,eAAeH,EAAcJ,GAAgBH,GAAaA,EAAY9M,EAAMuN,IAC9E,IAAZD,IACAL,GAAgBH,QAW5B,QAAgBW,IAAoBX,EAAYO,EAAchR,GAC1D,GAAIqR,GAAczY,SAASgL,eAAe6M,EAC1C,IAAIY,EAGA,IAAK,GADDC,GAAiBD,EAAYpN,uBAAuB,yBAC/C3P,EAAI,EAAGA,EAAIgd,EAAe3d,OAAQW,IAAK,CAC5C,GAAIid,GAAS,GAKTA,GAJC1c,EAAkBmL,GAIVsR,EAAehd,GAAG4O,aAAa,mBAH/BoO,EAAetR,GAAOkD,aAAa,kBAKhD,IAAIsO,GAAc5Y,SAASgL,eAAe2N,EAC1C,IAAIC,EAEA,IAAK,GADDC,GAAWD,EAAY7O,WAAWhP,OAC7BuO,EAAI,EAAGA,EAAIuP,EAAUvP,IACrBrN,EAAkBmL,GAKnBsR,EAAehd,GAAG2F,YAAYuX,EAAY7O,WAAW,KAJrD2O,EAAetR,GAAO/F,YAAYuX,EAAY7O,WAAW,IACzDrO,EAAIgd,EAAe3d,SAiB3C,QAAgB+d,IAAkBC,GAC9BnB,GAAU1D,QAAU6E,EAAS7E,QAQjC,QAAgB8E,MACZ,MAAOpB,IAAU1D,QTjJrB,GAAIrR,IAAY,gBACZtE,GAAM,EACNlF,IAAmB,ECCnB4f,IACAC,MACIC,QAAW,aACXC,MAAS,YAIbC,IACAC,QAAW,IACXC,MAAS,IACTC,YAAe,IACfC,SAAY,IACZC,UAAa,IACbC,SAAY,IACZC,IAAO,MACPC,YAAe,KAEfC,IAAoB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAM/CC,GAA4B,WAC5B,QAASA,MA4KT,MAnKAA,GAAWC,cAAgB,SAAU3e,EAAK4e,GAEtC,MAAO9e,GADK+C,IAAa+b,EAAQ,QAAUA,EACpB5e,IAQ3B0e,EAAWG,mBAAqB,SAAU7e,GACtC,MAAOF,GAAS,gCAAiCE,IAAQwD,KAAKsb,kBASlEJ,EAAWK,cAAgB,SAAUzM,EAAM7R,GAGvC,IAAK,GADDue,MACKxd,EAAK,EAAGyd,EAFFxe,GAAQiB,OAAOjB,KAAK6R,GAEK9Q,EAAKyd,EAAWvf,OAAQ8B,IAAM,CAClE,GAAIhB,GAAMye,EAAWzd,EAEhBwd,GAAIjc,eAAeuP,EAAK9R,MAEzBwe,EAAI1M,EAAK9R,IAAQA,GAGzB,MAAOwe,IAQXN,EAAWQ,eAAiB,SAAU5K,GAClC,GAAI6K,GAAW7K,EAAM8K,IAAI,SAAUjG,GAC/B,MAAOA,GAAIhZ,QAAQ,6BAA6B,UACjD+D,KAAK,IACR,OAAO,IAAIsH,QAAO2T,EAAU,MAOhCT,EAAWW,eAAiB,SAAU/M,GAGlC,IAAK,GADDxK,MACKtG,EAAK,EAAG8d,EAFD5d,OAAOjB,KAAKud,IAEcxc,EAAK8d,EAAY5f,OAAQ8B,IAAM,CACrE,GAAIhB,GAAM8e,EAAY9d,EAEtBsG,GAAIwK,EAAK9R,IAAQwd,GAAqBxd,GAE1C,MAAOsH,IAQX4W,EAAWa,eAAiB,SAAUC,GAGlC,IAAK,GAFD3Z,GAAM2Z,EAAI9f,OACVoI,EAAM,GACDzH,EAAI,EAAGA,EAAIwF,EAAKxF,IAEjByH,GADAzH,IAAMwF,EAAM,EACL2Z,EAAInf,GAAK,IAGTmf,EAAInf,EAGnB,OAAOyH,IAUX4W,EAAWe,kBAAoB,SAAUxf,EAAOyf,EAAO1f,GACnD,MAAOC,GAAME,QAAQuf,EAAO,SAAUvG,GAElC,MAAOnZ,GAAImZ,MASnBuF,EAAWiB,0BAA4B,SAAU3f,GAC7C,GAAI8H,KAGJ,OAFAA,GAAI9H,IAAMF,EAAS,UAAWE,GAC9B8H,EAAI8X,QAAU9f,EAAS,yBAA0BgI,EAAI9H,KAC9C8H,GAWX4W,EAAWmB,yBAA2B,SAAUC,EAAQC,EAAcC,EAAaC,GAC/E,GAAInY,MACAoY,EAAM1c,KAAKmc,0BAA0BG,EACzC,KAAKxf,EAAY4f,EAAIN,UAAYK,EAAY,CACzC,GAAIE,GAASF,EAAangB,EAAS,mBAAoBogB,GAAOpgB,EAASogB,EAAIN,QAAU,WAAYG,EAC5Fzf,GAAY6f,KACbrY,EAAIsY,YAAc5c,KAAKub,cAAcoB,EAAQ1B,IAC7C3W,EAAIuY,iBAAmB,GAAI7U,QAAOhI,KAAK+b,eAAeY,GAAS,KAC/DrY,EAAIwY,aAAe,IAAMH,EAAO,GAAK,IAAMA,EAAO,GAAK,IACnDH,IACAlY,EAAIwY,aAAeH,EAAO,GAAK,IAAMA,EAAO,GAC5CrY,EAAIyY,mBAAqBzgB,EAASmgB,EAAa,gBAAkB,wBAA0BC,EAAIN,QAASM,EAAIlgB,KAC5G8H,EAAI0Y,YAAchd,KAAK6b,eAAevX,EAAIyY,oBAC1CzY,EAAIiY,aAAeG,EAAIN,UAInC,MAAO9X,IAWX4W,EAAW+B,gBAAkB,SAAUX,EAAQC,EAAcW,GACzD,GAAI5Y,IAAQuB,WACR6W,EAAM1c,KAAKmc,0BAA0BG,EACzC,KAAKxf,EAAY4f,EAAIN,SAAU,CAC3B9X,EAAIiY,aAAeG,EAAIN,QACvB9X,EAAI6Y,cAAgB7gB,EAAS,wBAA0BogB,EAAIN,QAASM,EAAIlgB,KACxE8H,EAAI8Y,cAAgB9gB,EAAS,gBAAiBgI,EAAI6Y,cAClD,IAAIR,GAASrgB,EAASogB,EAAIN,QAAU,WAAYG,EAChD,KAAKzf,EAAY6f,GACb,IAAK,GAAI3e,GAAK,EAAGqf,EAAqBpC,GAAkBjd,EAAKqf,EAAmBnhB,OAAQ8B,IAAM,CAC1F,GAAInB,GAAIwgB,EAAmBrf,EAE3BsG,GAAIuB,OAAOhJ,GAAK8f,EAAO9f,IAInC,MAAOyH,IAEX4W,EAAWoC,MAAQ,cACnBpC,EAAWqC,OAAS,eACpBrC,EAAWI,iBAAmBlB,GACvBc,KAMPzW,IACA+Y,IAAO,MACPC,IAAO,MACPC,IAAO,KACPC,IAAO,IACPC,IAAO,IACPC,IAAO,OACPC,IAAO,MACPC,IAAO,MACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,IACPC,IAAO,QACPC,IAAO,QACPC,IAAO,KACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,OACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,OACPC,IAAO,IACPC,IAAO,IACPC,IAAO,QACPC,IAAO,QACPC,IAAO,QACPC,IAAO,IACPC,IAAO,IACPC,IAAO,MACPC,IAAO,IACPC,IAAO,IACPC,IAAO,IACPC,IAAO,KACPC,IAAO,IACPC,IAAO,MACPC,IAAO,IACPC,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,IAC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O,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,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,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,M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"}