{"version":3,"file":"ej2-base.min.js","sources":["../../src/util.js","../../src/intl/parser-base.js","../../src/internationalization.js","../../src/template.js","../../src/template-engine.js","../../src/dom.js","../../src/base.js","../../src/notify-property-change.js","../../src/animation.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/virtual-dom.js","../../src/event-handler.js","../../src/module-loader.js","../../src/component.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 * @return {boolean} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n if (Array.isArray(clone) && 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 * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + ' ');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|%|px|vh|vm|vmax|vmin|em/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {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 * @return {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 * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, 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 * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\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};\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 * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n 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 * @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 * @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 * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = 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 * @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 * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\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 * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n 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, 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);\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);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n 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);\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)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\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// }\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// tslint:disable-next-line\nfunction SlashReplace(tempStr) {\n // tslint:disable-next-line\n var double = \"\\\\\\\\\";\n if (tempStr.match(DOUBLE_SLASH)) {\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\n}\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys) {\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);\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.]+\\ 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n //tslint:disable:no-any\n if (isObject(toElement)) {\n VirtualDOM.prepend(fromElements, toElement);\n }\n else {\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 }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n if (isObject(toElement)) {\n VirtualDOM.append(fromElements, toElement);\n }\n else {\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 }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n if (isObject(element)) {\n return VirtualDOM.detach(element);\n }\n else {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n }\n}\n//tslint: enable:no-any\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n if (isObject(element)) {\n VirtualDOM.detach(element);\n }\n else {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n }\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n 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 * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\n//tslint:disable-next-line\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n if (isObject(context) && needsVDOM) {\n //tslint:disable-next-line\n return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: false });\n }\n else {\n selector = querySelectId(selector);\n return context.querySelector(selector);\n }\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n if (isObject(context) && !needsVDOM) {\n //tslint:disable-next-line\n return VirtualDOM.vDomSelector({ ele: context, selector: selector, selectAll: true });\n }\n else {\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n }\n}\nfunction querySelectId(selector) {\n if (selector.match(/#[0-9]/g)) {\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/)) {\n list[j] = list[j].replace(/#/, '[id=\\'') + '\\']';\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 * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\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 * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n if (isObject(element)) {\n // tslint:disable-next-line:no-any\n VirtualDOM.setStyleAttribute(element, attrs);\n }\n else {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n //tslint: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}\nexport function includeInnerHTML(ele, innerHTML) {\n if (isObject(ele)) {\n if (innerHTML === '') {\n ele.children = [];\n }\n else {\n var res = VirtualDOM.ConvertHTMLToJSon(innerHTML);\n if (res.length) {\n VirtualDOM.assignParent(res, ele);\n ele.children = res;\n }\n }\n }\n else {\n ele.innerHTML = innerHTML;\n }\n}\n//tslint:disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // tslint:disable-next-line:no-any\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 * @param {} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {Element | VirtualObject}\n * @private\n */\n//tslint:disable:no-any\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n else {\n return { tagName: element.tagName, attributes: element.attributes };\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 * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and 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 // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n 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 /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n /* 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 if (this.allowServerDataBinding) {\n var sfBlazor = 'sfBlazor';\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 ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @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 * @return {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 Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\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 * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? 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 * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\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 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 if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n Object.defineProperty(this.properties[curKey], 'isComplexArray', { value: true });\n }\n return this.properties[curKey];\n };\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}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\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 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 /* tslint:enable no-function-expression */\n}\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[keyString][action] = arrayFunction;\n }\n }\n return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","/***\n * Hijri parser\n */\nexport var HijriParser;\n(function (HijriParser) {\n /* tslint:disable */\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,\n 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,\n 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,\n 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,\n 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,\n 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,\n 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,\n 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,\n 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,\n 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,\n 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,\n 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,\n 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,\n 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,\n 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,\n 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,\n 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,\n 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,\n 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,\n 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,\n 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,\n 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,\n 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,\n 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,\n 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,\n 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,\n 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,\n 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,\n 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,\n 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,\n 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,\n 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,\n 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,\n 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,\n 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,\n 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,\n 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,\n 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,\n 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,\n 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,\n 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,\n 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,\n 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,\n 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,\n 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,\n 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,\n 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,\n 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,\n 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,\n 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,\n 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,\n 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,\n 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,\n 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,\n 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,\n 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,\n 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,\n 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,\n 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,\n 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,\n 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,\n 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,\n 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,\n 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,\n 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,\n 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,\n 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,\n 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,\n 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,\n 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,\n 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,\n 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,\n 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,\n 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,\n 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,\n 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,\n 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,\n 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,\n 79990];\n /* tslint:enable */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[i] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, 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 * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var 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 /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n // tslint:disable-next-line:max-func-body-length\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n curvalstr = value[timeSetter[char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n 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 DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","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 * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n 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 /* tslint:disable no-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 * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","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 number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|ccc/;\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 * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n // tslint:disable-next-line\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 // tslint: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 // tslint: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 // tslint:disable\n var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n var weekObject = parser.reverseObject(weekData);\n // 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 /* tslint:disable no-any */\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n /* tslint:disable no-any */\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W':\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$', '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 * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (isUndefined(tValue) && key === \"day\") {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n 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 retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n/* tslint:enable */\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\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 * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { 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 /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @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 * @return {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 // tslint:disable-next-line:no-any\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 Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { 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 */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n 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 * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\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 * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (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 * @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 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 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 * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode, 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 * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n // tslint:disable-next-line:no-any\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // tslint:disable-next-line:no-any\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 * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\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 function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param pData\n * @param aCurrency\n * @param rCurrency\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 */\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(this.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 * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n 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 * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\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 get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { isObject, getValue, extend, isNullOrUndefined } from './util';\nimport { getRandomId } from './template-engine';\nvar simpleRegex = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/;\nvar multipleSplitRegex = /(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))/g;\nvar idClassSelector = /^(\\.|#)/;\nvar selectMapper = {\n '.': 'className',\n '#': 'id'\n};\nvar classRegexString = '(?=.*?\\\\b{value}\\\\b)';\nvar assigner = { className: 'attributes.className', id: 'attributes.id', tagName: 'tagName' };\nvar emptyElements = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'embed', 'command', 'keygen', 'source', 'track', 'wbr'];\nvar blockElements = ['a', 'address', 'article', 'applet', 'aside', 'audio', 'blockquote',\n 'button', 'canvas', 'center', 'dd', 'del', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure',\n 'footer', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'iframe', 'ins',\n 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', 'output', 'p', 'pre', 'section',\n 'script', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul', 'video'];\nvar inlineElement = ['abbr', 'acronym', 'applet', 'b', 'basefont', 'bdo', 'big', 'br', 'button',\n 'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'map',\n 'object', 'q', 's', 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'textarea',\n 'tt', 'u', 'var'];\nvar selfClosingElements = ['colgroup', 'dd', 'dt', 'li', 'options', 'p', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\nvar fillAttrs = ['checked', 'compact', 'declare', 'defer', 'disabled', 'ismap', 'multiple',\n 'nohref', 'noresize', 'noshade', 'nowrap', 'readonly', 'selected'];\nvar cspElement = ['Script', 'style'];\nvar nameMapper = { 'tabindex': 'tabIndex' };\nvar startRegex = /^<([-A-Za-z0-9_]+)((?:\\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\nvar endRegex = /^<\\/([-A-Za-z0-9_]+)[^>]*>/;\nvar attributeRegex = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g;\n/**\n * Namespace for VirtualDOM\n * @private\n */\nexport var VirtualDOM;\n(function (VirtualDOM) {\n //tslint:disable:no-any\n function createElement(tagName, properties) {\n var children = [];\n var extended = extend({}, {}, properties, true);\n if (!isNullOrUndefined(properties)) {\n var keys = Object.keys(properties);\n if (keys.length) {\n if (extended.innerHTML) {\n children = ConvertHTMLToJSon(extended.innerHTML);\n delete extended.innerHTML;\n }\n if (extended.attrs) {\n extend(extended, extended.attrs);\n delete extended.attrs;\n }\n if (extended.styles) {\n var valArr = extended.styles.split(';');\n var vObj = {};\n for (var i = 0, length_1 = valArr.length; i < length_1; i++) {\n var cVal = valArr[i];\n var styleSplit = cVal.split(':');\n vObj[styleSplit[0]] = styleSplit[1];\n }\n delete extended.styles;\n extended.style = vObj;\n }\n }\n }\n return {\n tagName: tagName,\n attributes: extended || {},\n children: children\n };\n }\n VirtualDOM.createElement = createElement;\n function assignParent(childrens, parent) {\n if (parent && childrens) {\n childrens.forEach(function (child) {\n if (isObject(child)) {\n if (child.parent) {\n detach(child);\n }\n child.parent = parent;\n }\n return child;\n });\n }\n }\n VirtualDOM.assignParent = assignParent;\n function append(fromElements, toElement) {\n assignParent(fromElements, toElement);\n if (toElement.children) {\n toElement.children = toElement.children.concat(fromElements);\n }\n else {\n toElement.children = [].concat(fromElements);\n }\n }\n VirtualDOM.append = append;\n function prepend(child, toElement) {\n assignParent(child, toElement);\n if (!toElement.children || !toElement.children.length) {\n toElement.children = [];\n toElement.children.concat(child);\n }\n else {\n for (var i = child.length - 1; i >= 0; i--) {\n toElement.children.unshift(child[i]);\n }\n }\n }\n VirtualDOM.prepend = prepend;\n function detach(element) {\n var parent = element.parent;\n if (parent) {\n var index = parent.children.indexOf(element);\n if (index !== -1) {\n parent.children.splice(index);\n }\n }\n return parent;\n }\n VirtualDOM.detach = detach;\n //tslint:disable-next-line\n function vDomSelector(_a) {\n var ele = _a.ele, selector = _a.selector, selectAll = _a.selectAll, immediateParent = _a.immediateParent;\n var iSelector = selector.split(' ');\n var curColl = ele;\n for (var i = 0, length_2 = iSelector.length; i < length_2; i++) {\n var isDescendant = false;\n var parent_2 = curColl;\n var curSelector = iSelector[i];\n var simpleSelector = false;\n var mapper = [];\n if (simpleRegex.test(curSelector)) {\n simpleSelector = true;\n processSelector(curSelector, mapper);\n }\n else if (curSelector.indexOf('>') === -1) {\n var splitSelector = curSelector.match(multipleSplitRegex);\n for (var _i = 0, splitSelector_1 = splitSelector; _i < splitSelector_1.length; _i++) {\n var curMap = splitSelector_1[_i];\n processSelector(curMap, mapper);\n }\n }\n else if (curSelector.indexOf('>') !== -1) {\n isDescendant = true;\n var dSelector = curSelector.split('>');\n //tslint:disable-next-line\n var dParent = ele;\n var descendent = void 0;\n var flag = 0;\n for (var _b = 0, dSelector_1 = dSelector; _b < dSelector_1.length; _b++) {\n var sel = dSelector_1[_b];\n if (!dParent) {\n break;\n }\n if (dParent.length) {\n var descendentChild = [];\n for (var _c = 0, dParent_1 = dParent; _c < dParent_1.length; _c++) {\n var child = dParent_1[_c];\n descendentChild = descendentChild.concat(vDomSelector({\n ele: child, selector: sel,\n selectAll: selectAll, immediateParent: !!flag\n }));\n }\n descendent = descendentChild;\n }\n else {\n descendent = vDomSelector({ ele: dParent, selector: sel, selectAll: selectAll, immediateParent: !!flag });\n }\n flag++;\n dParent = descendent;\n }\n if (descendent) {\n curColl = descendent;\n }\n }\n if (!isDescendant) {\n if (parent_2.length) {\n var iCurSelector = [];\n for (var _d = 0, parent_1 = parent_2; _d < parent_1.length; _d++) {\n var curParent = parent_1[_d];\n iCurSelector = iCurSelector.concat(accessElement(curParent, mapper, selectAll, immediateParent));\n }\n curColl = iCurSelector;\n }\n else {\n curColl = accessElement(parent_2, mapper, selectAll, immediateParent);\n }\n }\n }\n if (selectAll) {\n return curColl;\n }\n else {\n return curColl[0] || null;\n }\n }\n VirtualDOM.vDomSelector = vDomSelector;\n function processSelector(selector, mapper) {\n var match = selector.match(idClassSelector);\n var obj = {};\n if (match) {\n var curMapper = selectMapper[match[0]];\n if (curMapper === 'className') {\n var curObj = mapper.filter(function (obj) { return obj.hasOwnProperty('className'); })[0];\n var canPush = false;\n if (!curObj) {\n canPush = true;\n curObj = {};\n }\n var existValue = curObj[curMapper] || '';\n curObj[curMapper] = existValue + classRegexString.replace('{value}', selector.replace('.', ''));\n if (canPush) {\n mapper.push(curObj);\n }\n }\n else {\n obj[curMapper] = selector.replace(match[0], '');\n mapper.push(obj);\n }\n }\n else {\n mapper.push({ tagName: selector });\n }\n }\n //tslint:disable-next-line\n function accessElement(ele, mapper, selectAll, immediateParent) {\n if (ele.children) {\n //tslint:disable-next-line\n var temp_1 = ele.children.filter(function (child) {\n if (typeof (child) !== 'string') {\n var matched = true;\n for (var _i = 0, mapper_1 = mapper; _i < mapper_1.length; _i++) {\n var map = mapper_1[_i];\n var key = Object.keys(map)[0];\n var expected = map[key];\n var actualValue = getValue(assigner[key], child);\n if (key === 'className') {\n if (!(new RegExp('^' + expected + '.*$').test(actualValue))) {\n matched = false;\n break;\n }\n }\n else if (actualValue !== expected) {\n matched = false;\n break;\n }\n }\n return matched;\n }\n else {\n return false;\n }\n });\n if (!immediateParent && (!temp_1.length || selectAll)) {\n ele.children.forEach(function (child) {\n if (isObject(child)) {\n temp_1 = temp_1.concat(accessElement(child, mapper, selectAll));\n }\n });\n }\n return temp_1;\n }\n else {\n return [];\n }\n }\n VirtualDOM.accessElement = accessElement;\n function ConvertHTMLToJSon(htmlString) {\n var results = [];\n var isText;\n var tagArray = [];\n var backup = htmlString;\n var nodeArray = [];\n while (htmlString) {\n isText = true;\n var lastVal = getLastValue(tagArray);\n if (!lastVal || !contains(cspElement, lastVal)) {\n if (htmlString.indexOf(']*>'), function (all, text) {\n text = text.replace(/|/g, '$1$2');\n iterateText(text);\n return '';\n });\n iterateEndTag('', getLastValue(tagArray));\n }\n backup = htmlString;\n }\n function iterateStartTag(start, tagName, rest) {\n tagName = tagName.toLowerCase();\n if (contains(blockElements, tagName)) {\n while (getLastValue(tagArray) && contains(inlineElement, getLastValue(tagArray))) {\n iterateEndTag('', getLastValue(tagArray));\n }\n }\n if (contains(selfClosingElements, tagName) && getLastValue(tagArray)) {\n iterateEndTag('', tagName);\n }\n var isSelfTag = contains(emptyElements, tagName);\n if (!isSelfTag) {\n tagArray.push(tagName);\n }\n var attrs = {};\n //tslint:disable-next-line\n rest.replace(attributeRegex, function (match, name) {\n var names = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n names[_i - 2] = arguments[_i];\n }\n //tslint:disable-next-line\n var val = names[2] ? names[2] :\n names[3] ? names[3] :\n names[4] ? names[4] :\n contains(fillAttrs, name) ? name : '';\n if (name === 'style') {\n var valArr = val.split(';');\n var vObj = {};\n for (var i = 0, length_3 = valArr.length; i < length_3; i++) {\n var cVal = valArr[i];\n var styleSplit = cVal.split(':');\n vObj[styleSplit[0]] = styleSplit[1];\n }\n val = vObj;\n }\n name = nameMapper[name] || name;\n attrs[name] = val;\n //tslint:disable-next-line\n });\n attrs['data-id'] = getRandomId();\n var tagObject = {\n tagName: tagName,\n attributes: attrs\n };\n if (isSelfTag) {\n var parent_3 = (nodeArray[0] || results);\n if (parent_3.children === undefined) {\n parent_3.children = [];\n }\n tagObject.parent = parent_3;\n parent_3.children.push(tagObject);\n }\n else {\n nodeArray.unshift(tagObject);\n }\n }\n function iterateEndTag(start, tagName) {\n var pos;\n if (!tagName) {\n pos = 0;\n }\n else {\n for (pos = tagArray.length - 1; pos >= 0; pos--) {\n if (tagArray[pos] === tagName) {\n break;\n }\n }\n }\n if (pos >= 0) {\n for (var j = nodeArray.length - 1; j >= pos; j--) {\n //tslint:disable-next-line\n var node = nodeArray.shift();\n if (nodeArray.length === 0) {\n results.push(node);\n }\n else {\n var parent_4 = nodeArray[0];\n if (parent_4.children === undefined) {\n parent_4.children = [];\n }\n node.parent = parent_4;\n parent_4.children.push(node);\n }\n }\n tagArray.length = pos;\n }\n }\n function iterateText(text) {\n if (nodeArray.length === 0) {\n results.push(text);\n }\n else {\n var parent_5 = nodeArray[0];\n if (parent_5.children === undefined) {\n parent_5.children = [];\n }\n parent_5.children.push(text);\n }\n }\n return results;\n }\n VirtualDOM.ConvertHTMLToJSon = ConvertHTMLToJSon;\n //tslint:disable-next-line \n function getLastValue(arr) {\n return arr[arr.length - 1];\n }\n function contains(arr, key) {\n return arr.indexOf(key) !== -1;\n }\n //tslint:disable-next-line\n function cloneNode(ele, deep) {\n if (isObject(ele)) {\n if (deep) {\n return extend({}, {}, ele, true);\n }\n else {\n return { tagName: ele.tagName, attributes: ele.attributes };\n }\n }\n else {\n return ele.cloneNode(deep);\n }\n }\n VirtualDOM.cloneNode = cloneNode;\n function setStyleAttribute(element, attrs) {\n if (element.attributes.style) {\n (element.attributes).style = extend({}, attrs);\n }\n else {\n element.attributes.style = extend(element.attributes.style, attrs);\n }\n }\n VirtualDOM.setStyleAttribute = setStyleAttribute;\n //tslint:enable:no-any\n})(VirtualDOM || (VirtualDOM = {}));\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 * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n 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 * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","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';\nimport { VirtualDOM } from './virtual-dom';\nimport { getRandomId } from './template-engine';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\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 /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n 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 Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = 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 Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n // tslint:disable-next-line:no-any\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 Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n * @private\n */\n //tslint:disable:no-any\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n if (isVDOM && this.isReactHybrid) {\n if (prop) {\n prop = {};\n }\n prop['data-id'] = getRandomId();\n return VirtualDOM.createElement(tagName, prop);\n }\n else {\n return createElement(tagName, prop);\n }\n };\n /**\n *\n * @param handler - handler to be triggered after state Updated.\n * @param argument - Arguments to be passed to caller.\n * @private\n */\n //tslint:disable:no-any\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n //tslint:disable:no-any\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 = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n //tslint:disable-next-line\n Component.prototype.renderReactTemplates = function () {\n //No Code\n };\n //tslint:disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, 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 // tslint:disable-next-line:no-any\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 // tslint:disable-next-line:no-any\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.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 }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\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 if (!this.clone && !this.dragArea) {\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 if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > 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 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 if (!this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\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 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 Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, 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 function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n // 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 * @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 _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 _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 _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _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 eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = 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 // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n // tslint:disable-next-line:max-line-length\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 ;\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 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","reference","open","appendChild","cloneNode","len","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","compile","template","helper","fnCode","evalExp","str","varCOunt","localKeys","isClass","singleSpace","LINES","DBL_QUOTED_STR","exp","cnt","offset","matchStr","SPECIAL_CHAR","matches","CALL_FUNCTION","rlStr","ELSEIF_STMT","test","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","Math","random","substr","templateString","compiler","engineObj","propName","templateId","isStringTemplate","index","blazorId","blazorTemplates","id","className","HAS_SVG","ele","childNodes","HAS_ROW","updateBlazorTemplate","templateName","comp","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","getElementById","innerTemplates","getElementsByClassName","tempId","getAttribute","tempElement","length_1","j","setTemplateEngine","classObj","getTemplateEngine","tagName","properties","SVG_REG","createElementNS","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","_b","classList_1","curClass","RegExp","contains","add","removeClass","flag","classList_2","classArr","splice","remove","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","VirtualDOM","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","append","script","text","head","detach","removeChild","EventHandler","clearEvents","iKey","select","selector","context","needsVDOM","vDomSelector","selectAll","querySelectId","idList","list","closest","el","nodeType","siblings","childNodes_1","curNode","ELEMENT_NODE","getAttributeOrDefault","property","attrVal","isObj","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","includeInnerHTML","children","res","ConvertHTMLToJSon","assignParent","containsClass","getComponent","ej2_instances","getModuleName","removeChildInstance","childEle","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","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","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","enableRipple","isRipple","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","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","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","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","uA","info","maxTouchPoints","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","Engine","render","simpleRegex","multipleSplitRegex","idClassSelector","selectMapper",".","#","classRegexString","assigner","emptyElements","blockElements","inlineElement","selfClosingElements","fillAttrs","cspElement","nameMapper","tabindex","startRegex","endRegex","attributeRegex","extended","valArr","vObj","styleSplit","childrens","concat","immediateParent","iSelector","curColl","length_2","isDescendant","parent_2","curSelector","processSelector","splitSelector_1","dParent","descendent","dSelector_1","sel","descendentChild","dParent_1","iCurSelector","_d","parent_1","curParent","accessElement","curMapper","filter","canPush","existValue","temp_1","matched","mapper_1","expected","actualValue","htmlString","iterateStartTag","rest","getLastValue","tagArray","iterateEndTag","isSelfTag","names","length_3","tagObject","parent_3","nodeArray","results","parent_4","iterateText","parent_5","isText","lastVal","all","tagIndex","arr","isColEName","Base","isRendered","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","finalUpdate","childChangedProperties","modelObserver","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","moduleClass","__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","startTime","prevTimeStamp","startAnimation","begin","avg","timingFunction","progress","requestAnimationFrame","performance","now","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","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","Component","randomId","needsID","isReactHybrid","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","accessMount","mount","getRootElement","actualElement","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","localStorage","getItem","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","this_1","newList","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","scroll","vertical","horizontal","client","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","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","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","scrollWidth","scrollHeight","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","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","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","localName","attr","hasAttribute"],"mappings":"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O,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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AO,MAAO,MAAO,MAAO,MACvJ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO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AAKka,EAAK,IAAMlM,EAAIhO,EAAK,GAAKka,EAAK,KAAOlM,EAAIhO,EAAK,GAAKka,EAAK,MAE/Em1C,EAAMtxD,UAAU2xD,oBAAsB,SAAUvO,GAG5C,MADYA,GAAIiB,gBAAgD,IAA9BjB,EAAIiB,eAAenjD,OAAekiD,EAAIiB,eAAe,GAAKjB,GAGhGtK,IACIx0C,MACDgtD,EAAMtxD,UAAW,UAAO,IAC3B84C,IACIx0C,MACDgtD,EAAMtxD,UAAW,cAAW,IAC/B84C,IACIx0C,MACDgtD,EAAMtxD,UAAW,YAAS,IAC7B84C,IACIx0C,MACDgtD,EAAMtxD,UAAW,aAAU,IAC9B84C,IACIn/B,GAAS,MACV23C,EAAMtxD,UAAW,mBAAgB,IACpC84C,IACIn/B,GAAS,MACV23C,EAAMtxD,UAAW,uBAAoB,IACxC84C,IACI5+B,MAAYk3C,KACbE,EAAMtxD,UAAW,oBAAiB,IACrCsxD,EAAQxY,IACJn+B,IACD22C,IAELpa,ICtTEme,IACA,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,KACEC,UAAW,OAAQ/gD,SAAU,0BAC7B+gD,UAAW,aAAc/gD,SAAU,gCACnC+gD,UAAW,QAAS/gD,SAAU,2BAC9B+gD,UAAW,QAAS/gD,SAAU,2BAC9B+gD,UAAW,OAAQ/gD,SAAU,qCAE/BghD,IAAY,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,SACA,YACA,mBACA,WACA,UACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,UACA,eACA,cACA,cACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,YACA,cACA,cACA,aACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,eACA,UACA,oBAEAC,GAAoC,WACpC,QAASA,MA2ET,MAzEAA,GAAmBC,eAAiB,WAChC,OACIC,WACIC,KAAMP,GACNvjD,WAAYwjD,MAKxBG,EAAmBI,SAAW,SAAUp0D,GACpC,GAAIq0D,GAAO9wD,KAAK0wD,gBAEhB,OADa1wD,MAAK+wD,eAAeD,EAAMr0D,IAG3Cg0D,EAAmBM,eAAiB,SAAUD,EAAMr0D,GAChDuD,KAAKswD,YAAcQ,EAAKH,UAAU7jD,WAClC9M,KAAKqwD,WAAaS,EAAKH,UAAUC,KACjC5wD,KAAKgxD,YAAc7vD,SAASW,cAAc,OAC1C9B,KAAKgxD,YAAYtuD,UAAYjG,EAC7BuD,KAAKixD,gBACLjxD,KAAKkxD,iBACLlxD,KAAKmxD,gBACL,IAAIC,GAAepxD,KAAKgxD,YAAYtuD,SAEpC,OADA1C,MAAKqxD,gBACED,GAEXX,EAAmBY,cAAgB,WAG/B,IAAK,GADDC,GAAQtxD,KAAKgxD,YAAY//C,SACpB9E,EAAI,EAAGA,EAAImlD,EAAMp1D,OAAQiQ,IAE9B,IAAK,GADDokD,GAAYe,EAAMnlD,GAAGW,WAChBjQ,EAAI,EAAGA,EAAI0zD,EAAUr0D,OAAQW,IAClCmD,KAAKgxD,YAAY//C,SAAS9E,GAAG8L,gBAAgBs4C,EAAU1zD,GAAG00D,YAItEd,EAAmBQ,cAAgB,WAC/B,GAAIjkD,GAAWhN,KAAKgxD,YAAY9uD,iBAAiBlC,KAAKqwD,WAAW3vD,KAAK,KAClEsM,GAAS9Q,OAAS,GAClB8Q,EAASjO,QAAQ,SAAU4C,GACvBuN,GAAOvN,MAOnB8uD,EAAmBS,eAAiB,WAChC,GAAIlkD,GAAWhN,KAAKgxD,YAAY9uD,iBAAiB,IAAMsuD,GAAS9vD,KAAK,OAAS,IAC1EsM,GAAS9Q,OAAS,GAClB8Q,EAASjO,QAAQ,SAAU4C,GACvB6uD,GAASzxD,QAAQ,SAAUyyD,GACnB7vD,EAAQ8vD,aAAaD,IACrB7vD,EAAQsW,gBAAgBu5C,QAS5Cf,EAAmBU,eAAiB,WAChC,GAAIpxD,GAAQC,IACZA,MAAKswD,YAAYvxD,QAAQ,SAAU+xD,EAAMnmD,GACrC,GAAIqC,GAAWjN,EAAMixD,YAAY9uD,iBAAiB4uD,EAAKthD,SACnDxC,GAAS9Q,OAAS,GAClB8Q,EAASjO,QAAQ,SAAU4C,GACvBA,EAAQsW,gBAAgB64C,EAAKP,gBAKtCE"}