{"version":3,"sources":["webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/NumberFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/DurationFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/DateFormatter.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/formatters/TextFormatter.js"],"names":["__webpack_require__","d","__webpack_exports__","NumberFormatter","tslib__WEBPACK_IMPORTED_MODULE_0__","_utils_Language__WEBPACK_IMPORTED_MODULE_1__","_Base__WEBPACK_IMPORTED_MODULE_2__","_formatters_TextFormatter__WEBPACK_IMPORTED_MODULE_3__","_Registry__WEBPACK_IMPORTED_MODULE_4__","_utils_Strings__WEBPACK_IMPORTED_MODULE_5__","_utils_Object__WEBPACK_IMPORTED_MODULE_6__","_utils_Utils__WEBPACK_IMPORTED_MODULE_7__","_utils_Type__WEBPACK_IMPORTED_MODULE_8__","_super","_this","call","this","_negativeBase","_numberFormat","_outputFormat","className","applyTheme","prototype","dispose","language","Object","defineProperty","get","_language","sprite","set","value","enumerable","configurable","format","toLowerCase","details","info","parseFormat","source","Number","positive","negative","zero","formatted","template","split","join","applyFormat","cached","getCache","thousands","active","passive","interval","separator","translateEmpty","decimals","parsed","replace","parts","part","item","partFormat","chunks","chunk","i","length","text","type","matches","match","mods","mod","modSpacing","a","b","pop","setCache","Math","abs","prefix","suffix","indexOf","a_1","applyPrefix","bytePrefixes","a_2","smallNumberPrefixes","bigNumberPrefixes","exp","toExponential","round","pow","res","ints","Array","ip","intsr","reverse","len","c","substr","unshift","push","decs","prefixes","force","newvalue","applied","k","number","parseFloat","toPrecision","toString","floor","invalidateSprite","invalidate","_bigNumberPrefixes","translate","_smallNumberPrefixes","_bytePrefixes","outputFormat","escape","unescape","registeredClasses","DurationFormatter","_utils_Math__WEBPACK_IMPORTED_MODULE_9__","_baseUnit","_unitValues","millisecond","second","minute","hour","day","week","month","year","_unitAliases","Y","D","H","K","n","base","baseUnit","durationFormat","getFormat","color","absolute","dirs","x","tstamp","toTimeStamp","unit","toTimeUnit","digits","code","maxValue","maxUnit","getValueUnit","durationFormats","currentUnit","ms","getMilliseconds","key","val","num","_durationFormat","_durationFormats","DateFormatter","_utils_Utils__WEBPACK_IMPORTED_MODULE_6__","_utils_Type__WEBPACK_IMPORTED_MODULE_7__","_dateFormat","_inputDateFormat","_utc","_firstDayOfWeek","_months","_monthsShort","_weekdays","_weekdaysShort","capitalize","dateFormat","date","parse","timezoneOffset","setMinutes","getMinutes","getTimezoneOffset","getTime","toUpperCase","fullYear","weekday","hours","minutes","seconds","milliseconds","offset","timestamp","utc","getUTCFullYear","getUTCMonth","getUTCDay","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getFullYear","getMonth","getDay","getDate","getHours","getSeconds","translateFunc","firstDayOfWeek","tz","tzh","tzm","toISOString","toUTCString","inputDateFormat","Date","reg","parsedIndexes","year3","year2","year1","monthShort","monthLong","weekdayShort","weekdayLong","yearDay","hourBase0","hour12Base0","hourBase1","hour12Base1","millisecondDigits","am","zone","iso","indexAdjust","index","getStringList","regex","RegExp","parseInt","setUTCFullYear","setFullYear","resolveMonth","setUTCMonth","setMonth","resolveShortMonth","setUTCDate","setDate","setUTCHours","setHours","isAm","setUTCMinutes","setUTCSeconds","setSeconds","setUTCMilliseconds","setMilliseconds","setTime","dir","originalOffset","diff","isDefault","translateAll","list","_timezoneOffset","getTextFormatter","formatter","_Base__WEBPACK_IMPORTED_MODULE_1__","_rendering_AMElement__WEBPACK_IMPORTED_MODULE_2__","_utils_Adapter__WEBPACK_IMPORTED_MODULE_3__","_utils_Type__WEBPACK_IMPORTED_MODULE_6__","TextFormatter","adapter","debug","output","styles","wrap","texts","t","apply","s","cleanUp","getPlaceholder","style","wrapHtml","translateStyleShortcuts","wrapSvg","getSvgElement","element","textContent","node","setAttribute","styleSvgToHtml","getHtmlElement","document","createElement","innerHTML","quotedBlocks","noFormatting","chunks2","i2","chunk2","isImage"],"mappings":"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","file":"js/chunk-84d4b9bc.ee150278.js","sourcesContent":["/**\r\n * Number formatting-related functionality.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Language } from \"../utils/Language\";\r\nimport { BaseObject } from \"../Base\";\r\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $strings from \"../utils/Strings\";\r\nimport * as $object from \"../utils/Object\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * NumberFormatter class. Formats numbers according to specified formats.\r\n *\r\n * @todo Apply translations to suffixes/prefixes\r\n */\r\nvar NumberFormatter = /** @class */ (function (_super) {\r\n tslib_1.__extends(NumberFormatter, _super);\r\n /**\r\n * Constructor\r\n */\r\n function NumberFormatter() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A base value for negative numbers. Will treat all numbers below this value\r\n * as negative numbers.\r\n */\r\n _this._negativeBase = 0;\r\n /**\r\n * Holds number format.\r\n *\r\n * @default #,###.#####\r\n */\r\n _this._numberFormat = \"#,###.#####\";\r\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\r\n _this._outputFormat = \"svg\";\r\n _this.className = \"NumberFormatter\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n NumberFormatter.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this.language) {\r\n this.language.dispose();\r\n }\r\n };\r\n Object.defineProperty(NumberFormatter.prototype, \"language\", {\r\n /**\r\n * @return Language\r\n */\r\n get: function () {\r\n if (!this._language) {\r\n if (this.sprite) {\r\n this._language = this.sprite.language;\r\n }\r\n else {\r\n this._language = new Language;\r\n }\r\n }\r\n return this._language;\r\n },\r\n /**\r\n * A reference to [[Language]] instance.\r\n *\r\n * Formatter will use language to translate various items, like number\r\n * suffixes, etc.\r\n *\r\n * @param value Language\r\n */\r\n set: function (value) {\r\n this._language = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Formats the number according to specific format.\r\n *\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @return Formatted number\r\n */\r\n NumberFormatter.prototype.format = function (value, format) {\r\n // no format passed in or \"Number\"\r\n if (typeof format === \"undefined\" || format.toLowerCase() === \"number\") {\r\n format = this._numberFormat;\r\n }\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // Get format info (it will also deal with parser caching)\r\n var info = this.parseFormat(format, this.language);\r\n // cast to number just in case\r\n // TODO: maybe use better casting\r\n var source = Number(value);\r\n // format and replace the number\r\n var details;\r\n if (source > this._negativeBase) {\r\n details = info.positive;\r\n }\r\n else if (source < this._negativeBase) {\r\n details = info.negative;\r\n }\r\n else {\r\n details = info.zero;\r\n }\r\n // Format\r\n var formatted = details.template.split($strings.PLACEHOLDER).join(this.applyFormat(source, details));\r\n return formatted;\r\n };\r\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param language Language\r\n */\r\n NumberFormatter.prototype.parseFormat = function (format, language) {\r\n var _this = this;\r\n // Check cache\r\n var cached = this.getCache(format);\r\n if ($type.hasValue(cached)) {\r\n return cached;\r\n }\r\n // init format parse info holder\r\n var info = {\r\n \"positive\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n },\r\n \"negative\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n },\r\n \"zero\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": language.translateEmpty(\"_thousandSeparator\")\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": language.translateEmpty(\"_decimalSeparator\")\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n }\r\n };\r\n // Escape double vertical bars (that mean display one vertical bar)\r\n format = format.replace(\"||\", $strings.PLACEHOLDER2);\r\n // Split it up and deal with different formats\r\n var parts = format.split(\"|\");\r\n info.positive.source = parts[0];\r\n if (typeof parts[2] === \"undefined\") {\r\n info.zero = info.positive;\r\n }\r\n else {\r\n info.zero.source = parts[2];\r\n }\r\n if (typeof parts[1] === \"undefined\") {\r\n info.negative = info.positive;\r\n }\r\n else {\r\n info.negative.source = parts[1];\r\n }\r\n // Parse each\r\n $object.each(info, function (part, item) {\r\n // Already parsed\r\n if (item.parsed) {\r\n return;\r\n }\r\n // Check cached\r\n if (typeof _this.getCache(item.source) !== \"undefined\") {\r\n info[part] = _this.getCache(item.source);\r\n return;\r\n }\r\n // Begin parsing\r\n var partFormat = item.source;\r\n // Just \"Number\"?\r\n if (partFormat.toLowerCase() === \"number\") {\r\n partFormat = _this._numberFormat;\r\n }\r\n // Let TextFormatter split into chunks\r\n var chunks = getTextFormatter().chunk(partFormat, true);\r\n for (var i = 0; i < chunks.length; i++) {\r\n var chunk = chunks[i];\r\n // replace back double vertical bar\r\n chunk.text = chunk.text.replace($strings.PLACEHOLDER2, \"|\");\r\n if (chunk.type === \"value\") {\r\n // Parse format\r\n // Look for codes\r\n var matches = chunk.text.match(/[#0.,]+[ ]?[abesABES%!]?[abesABES‰!]?/);\r\n if (matches) {\r\n if (matches === null || matches[0] === \"\") {\r\n // no codes here - assume string\r\n // nothing to do here\r\n item.template += chunk.text;\r\n }\r\n else {\r\n // look for the format modifiers at the end\r\n var mods = matches[0].match(/[abesABES%‰!]{2}|[abesABES%‰]{1}$/);\r\n if (mods) {\r\n item.mod = mods[0].toLowerCase();\r\n item.modSpacing = matches[0].match(/[ ]{1}[abesABES%‰!]{1}$/) ? true : false;\r\n }\r\n // break the format up\r\n var a = matches[0].split(\".\");\r\n // Deal with thousands\r\n if (a[0] === \"\") {\r\n // No directives for thousands\r\n // Leave default settings (no formatting)\r\n }\r\n else {\r\n // Counts\r\n item.thousands.active = (a[0].match(/0/g) || []).length;\r\n item.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active;\r\n // Separator interval\r\n var b = a[0].split(\",\");\r\n if (b.length === 1) {\r\n // No thousands separators\r\n // Do nothing\r\n }\r\n else {\r\n // Use length fo the last chunk as thousands length\r\n item.thousands.interval = $type.getValue(b.pop()).length;\r\n if (item.thousands.interval === 0) {\r\n item.thousands.interval = -1;\r\n }\r\n }\r\n }\r\n // Deal with decimals\r\n if (typeof (a[1]) === \"undefined\") {\r\n // No directives for decimals\r\n // Leave at defaults (no formatting)\r\n }\r\n else {\r\n // Counts\r\n item.decimals.active = (a[1].match(/0/g) || []).length;\r\n item.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\r\n }\r\n // Add special code to template\r\n item.template += chunk.text.split(matches[0]).join($strings.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n else {\r\n // Quoted string - take it as it is\r\n item.template += chunk.text;\r\n }\r\n }\r\n // Apply style formatting\r\n //item.template = getTextFormatter().format(item.template, this.outputFormat);\r\n // Save cache\r\n _this.setCache(item.source, item);\r\n // Mark this as parsed\r\n item.parsed = true;\r\n });\r\n // Save cache (the whole thing)\r\n this.setCache(format, info);\r\n return info;\r\n };\r\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by {parseFormat}\r\n * @return Formatted number\r\n */\r\n NumberFormatter.prototype.applyFormat = function (value, details) {\r\n // Use absolute values\r\n var negative = value < 0;\r\n value = Math.abs(value);\r\n // Recalculate according to modifier\r\n var prefix = \"\", suffix = \"\";\r\n var mods = details.mod ? details.mod.split(\"\") : [];\r\n if (mods.indexOf(\"b\") !== -1) {\r\n var a_1 = this.applyPrefix(value, this.bytePrefixes, mods.indexOf(\"!\") !== -1);\r\n value = a_1[0];\r\n prefix = a_1[1];\r\n suffix = a_1[2];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (mods.indexOf(\"a\") !== -1) {\r\n var a_2 = this.applyPrefix(value, value < 1.00 ? this.smallNumberPrefixes : this.bigNumberPrefixes, mods.indexOf(\"!\") !== -1);\r\n value = a_2[0];\r\n prefix = a_2[1];\r\n suffix = a_2[2];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (mods.indexOf(\"%\") !== -1) {\r\n value *= 100;\r\n suffix = \"%\";\r\n }\r\n else if (mods.indexOf(\"‰\") !== -1) {\r\n value *= 1000;\r\n suffix = \"‰\";\r\n }\r\n // Round to passive\r\n if (mods.indexOf(\"e\") !== -1) {\r\n // convert the value to exponential\r\n var exp = void 0;\r\n if (details.decimals.passive >= 0) {\r\n exp = value.toExponential(details.decimals.passive).split(\"e\");\r\n }\r\n else {\r\n exp = value.toExponential().split(\"e\");\r\n }\r\n value = Number(exp[0]);\r\n suffix = \"e\" + exp[1];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (details.decimals.passive === 0) {\r\n value = Math.round(value);\r\n }\r\n else if (details.decimals.passive > 0) {\r\n var d = Math.pow(10, details.decimals.passive);\r\n value = Math.round(value * d) / d;\r\n }\r\n // Init return value\r\n var res = \"\";\r\n // Calc integer and decimal parts\r\n var a = $utils.numberToString(value).split(\".\");\r\n // Format integers\r\n var ints = a[0];\r\n // Pad integers to active length\r\n if (ints.length < details.thousands.active) {\r\n ints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\r\n }\r\n // Insert thousands separators\r\n if (details.thousands.interval > 0) {\r\n var ip = [];\r\n var intsr = ints.split(\"\").reverse().join(\"\");\r\n for (var i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\r\n var c = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\r\n if (c !== \"\") {\r\n ip.unshift(c);\r\n }\r\n }\r\n ints = ip.join(details.thousands.separator);\r\n }\r\n // Add integers\r\n res += ints;\r\n // Add decimals\r\n if (a.length === 1) {\r\n a.push(\"\");\r\n }\r\n var decs = a[1];\r\n // Fill zeros?\r\n if (decs.length < details.decimals.active) {\r\n decs += Array(details.decimals.active - decs.length + 1).join(\"0\");\r\n }\r\n if (decs !== \"\") {\r\n res += details.decimals.separator + decs;\r\n }\r\n // Can't have empty return value\r\n if (res === \"\") {\r\n res = \"0\";\r\n }\r\n // Add minus sign back\r\n if (value !== 0 && negative && (mods.indexOf(\"s\") === -1)) {\r\n res = \"-\" + res;\r\n }\r\n // Add suffixes/prefixes\r\n if (prefix) {\r\n res = prefix + res;\r\n }\r\n if (suffix) {\r\n res += suffix;\r\n }\r\n return res;\r\n };\r\n /**\r\n * Chooses appropriate prefix and suffix based on the passed in rules.\r\n *\r\n * @param value Value\r\n * @param prefixes Prefix array\r\n * @param force Force application of a first prefix (@sice 4.5.4)\r\n * @return Result\r\n */\r\n NumberFormatter.prototype.applyPrefix = function (value, prefixes, force) {\r\n if (force === void 0) { force = false; }\r\n var newvalue = value;\r\n var prefix = \"\";\r\n var suffix = \"\";\r\n var applied = false;\r\n var k = 1;\r\n for (var i = 0, len = prefixes.length; i < len; i++) {\r\n if (prefixes[i].number <= value) {\r\n if (prefixes[i].number === 0) {\r\n newvalue = 0;\r\n }\r\n else {\r\n newvalue = value / prefixes[i].number;\r\n k = prefixes[i].number;\r\n }\r\n prefix = prefixes[i].prefix;\r\n suffix = prefixes[i].suffix;\r\n applied = true;\r\n }\r\n }\r\n if (!applied && force && prefixes.length && value != 0) {\r\n // Prefix was not applied. Use the first prefix.\r\n newvalue = value / prefixes[0].number;\r\n prefix = prefixes[0].prefix;\r\n suffix = prefixes[0].suffix;\r\n applied = true;\r\n }\r\n if (applied) {\r\n newvalue = parseFloat(newvalue.toPrecision(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length));\r\n }\r\n return [newvalue, prefix, suffix];\r\n };\r\n /**\r\n * Invalidates the parent [[Sprite]] object.\r\n */\r\n NumberFormatter.prototype.invalidateSprite = function () {\r\n if (this.sprite) {\r\n this.sprite.invalidate();\r\n }\r\n };\r\n Object.defineProperty(NumberFormatter.prototype, \"numberFormat\", {\r\n /**\r\n * @return A format to use for number formatting\r\n */\r\n get: function () {\r\n return this._numberFormat;\r\n },\r\n /**\r\n * Number format.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param format A format to use for number formatting\r\n */\r\n set: function (format) {\r\n this._numberFormat = format;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NumberFormatter.prototype, \"negativeBase\", {\r\n /**\r\n * @return A format to use for number formatting\r\n */\r\n get: function () {\r\n return this._negativeBase;\r\n },\r\n /**\r\n * Negative base for negative numbers.\r\n *\r\n * @default 0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param format A format to use for number formatting\r\n */\r\n set: function (value) {\r\n this._negativeBase = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NumberFormatter.prototype, \"bigNumberPrefixes\", {\r\n /**\r\n * @return Prefixes for big numbers\r\n */\r\n get: function () {\r\n if (!$type.hasValue(this._bigNumberPrefixes)) {\r\n this._bigNumberPrefixes = [\r\n { \"number\": 1e+3, \"suffix\": this.language.translate(\"_big_number_suffix_3\") },\r\n { \"number\": 1e+6, \"suffix\": this.language.translate(\"_big_number_suffix_6\") },\r\n { \"number\": 1e+9, \"suffix\": this.language.translate(\"_big_number_suffix_9\") },\r\n { \"number\": 1e+12, \"suffix\": this.language.translate(\"_big_number_suffix_12\") },\r\n { \"number\": 1e+15, \"suffix\": this.language.translate(\"_big_number_suffix_15\") },\r\n { \"number\": 1e+18, \"suffix\": this.language.translate(\"_big_number_suffix_18\") },\r\n { \"number\": 1e+21, \"suffix\": this.language.translate(\"_big_number_suffix_21\") },\r\n { \"number\": 1e+24, \"suffix\": this.language.translate(\"_big_number_suffix_24\") }\r\n ];\r\n }\r\n return this._bigNumberPrefixes;\r\n },\r\n /**\r\n * Prefixes for big numbers.\r\n *\r\n * It's an array of objects of number/prefix pairs.\r\n *\r\n * ```JSON\r\n * [\r\n * { \"number\": 1e+3, \"suffix\": \"K\" },\r\n * { \"number\": 1e+6, \"suffix\": \"M\" },\r\n * { \"number\": 1e+9, \"suffix\": \"G\" },\r\n * { \"number\": 1e+12, \"suffix\": \"T\" },\r\n * { \"number\": 1e+15, \"suffix\": \"P\" },\r\n * { \"number\": 1e+18, \"suffix\": \"E\" },\r\n * { \"number\": 1e+21, \"suffix\": \"Z\" },\r\n * { \"number\": 1e+24, \"suffix\": \"Y\" }\r\n * ]\r\n * ```\r\n *\r\n * If the number is bigger than the `number` ir will be converted to the\r\n * appropriate bigger number with prefix.\r\n *\r\n * E.g. as per above `1500` will be converted to `1.5K`.\r\n *\r\n * Please note that for this transformation to be enabled, you need to\r\n * enable it specific modifier in your format setting.\r\n *\r\n * The modifier for big/small number modification is \"a\":\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00a\")}\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for big numbers\r\n */\r\n set: function (prefixes) {\r\n this._bigNumberPrefixes = prefixes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NumberFormatter.prototype, \"smallNumberPrefixes\", {\r\n /**\r\n * @return Prefixes for small numbers\r\n */\r\n get: function () {\r\n if (!$type.hasValue(this._smallNumberPrefixes)) {\r\n this._smallNumberPrefixes = [\r\n { \"number\": 1e-24, \"suffix\": this.language.translate(\"_small_number_suffix_24\") },\r\n { \"number\": 1e-21, \"suffix\": this.language.translate(\"_small_number_suffix_21\") },\r\n { \"number\": 1e-18, \"suffix\": this.language.translate(\"_small_number_suffix_18\") },\r\n { \"number\": 1e-15, \"suffix\": this.language.translate(\"_small_number_suffix_15\") },\r\n { \"number\": 1e-12, \"suffix\": this.language.translate(\"_small_number_suffix_12\") },\r\n { \"number\": 1e-9, \"suffix\": this.language.translate(\"_small_number_suffix_9\") },\r\n { \"number\": 1e-6, \"suffix\": this.language.translate(\"_small_number_suffix_6\") },\r\n { \"number\": 1e-3, \"suffix\": this.language.translate(\"_small_number_suffix_3\") }\r\n ];\r\n }\r\n return this._smallNumberPrefixes;\r\n },\r\n /**\r\n * Prefixes for big numbers.\r\n *\r\n * It's an array of objects of number/prefix pairs.\r\n *\r\n * ```JSON\r\n * [\r\n * { \"number\": 1e-24, \"suffix\": \"y\" },\r\n * { \"number\": 1e-21, \"suffix\": \"z\" },\r\n * { \"number\": 1e-18, \"suffix\": \"a\" },\r\n * { \"number\": 1e-15, \"suffix\": \"f\" },\r\n * { \"number\": 1e-12, \"suffix\": \"p\" },\r\n * { \"number\": 1e-9, \"suffix\": \"n\" },\r\n * { \"number\": 1e-6, \"suffix\": \"μ\" },\r\n * { \"number\": 1e-3, \"suffix\": \"m\" }\r\n * ]\r\n * ```\r\n *\r\n * If the number is smaller than the `number` ir will be converted to the\r\n * appropriate smaller number with prefix.\r\n *\r\n * E.g. as per above `0.0015` will be converted to `1.5m`.\r\n *\r\n * Please note that for this transformation to be enabled, you need to\r\n * enable it specific modifier in your format setting.\r\n *\r\n * The modifier for big/small number modification is \"a\":\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00a\")}\r\n * ```\r\n *\r\n * IMPORTANT: The order of the suffixes is important. The list must start\r\n * from the smallest number and work towards bigger ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for small numbers\r\n */\r\n set: function (prefixes) {\r\n this._smallNumberPrefixes = prefixes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NumberFormatter.prototype, \"bytePrefixes\", {\r\n /**\r\n * @return Prefixes for byte-size formatting\r\n */\r\n get: function () {\r\n if (!$type.hasValue(this._bytePrefixes)) {\r\n this._bytePrefixes = [\r\n { \"number\": 0, suffix: this.language.translate(\"_byte_suffix_B\") },\r\n { \"number\": 1024, suffix: this.language.translate(\"_byte_suffix_KB\") },\r\n { \"number\": 1048576, suffix: this.language.translate(\"_byte_suffix_MB\") },\r\n { \"number\": 1073741824, suffix: this.language.translate(\"_byte_suffix_GB\") },\r\n { \"number\": 1099511627776, suffix: this.language.translate(\"_byte_suffix_TB\") },\r\n { \"number\": 1125899906842624, suffix: this.language.translate(\"_byte_suffix_PB\") }\r\n ];\r\n }\r\n return this._bytePrefixes;\r\n },\r\n /**\r\n * Basically the same as `bigNumberPrefixes`, except base for calculation\r\n * is not thousand but byte (1024).\r\n *\r\n * The modifier is \"b\".\r\n *\r\n * ```Text\r\n * {myfield.formatNumber(\"#,###.00b\")}\r\n * ```\r\n *\r\n * The above `2048` will change to `2K`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-numbers/} Tutorial on number formatting\r\n * @param prefixes Prefixes for byte-size formatting\r\n */\r\n set: function (prefixes) {\r\n this._bytePrefixes = prefixes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NumberFormatter.prototype, \"outputFormat\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Output format\r\n */\r\n get: function () {\r\n return this._outputFormat;\r\n },\r\n /**\r\n * Ooutput format: \"svg\" or \"html\".\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Output format\r\n */\r\n set: function (outputFormat) {\r\n this._outputFormat = outputFormat.toLowerCase();\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\r\n NumberFormatter.prototype.escape = function (text) {\r\n return text.replace(\"||\", $strings.PLACEHOLDER2);\r\n };\r\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\r\n NumberFormatter.prototype.unescape = function (text) {\r\n return text.replace($strings.PLACEHOLDER2, \"|\");\r\n };\r\n return NumberFormatter;\r\n}(BaseObject));\r\nexport { NumberFormatter };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NumberFormatter\"] = NumberFormatter;\r\n//# sourceMappingURL=NumberFormatter.js.map","/**\r\n * Duration formatting functionality.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Language } from \"../utils/Language\";\r\nimport { BaseObject } from \"../Base\";\r\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $strings from \"../utils/Strings\";\r\nimport * as $object from \"../utils/Object\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $math from \"../utils/Math\";\r\n/**\r\n * DurationFormatter class. Formats numbers as durations.\r\n *\r\n * `1000` as `16:40`\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Tutorial on duration formatting\r\n */\r\nvar DurationFormatter = /** @class */ (function (_super) {\r\n tslib_1.__extends(DurationFormatter, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DurationFormatter() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A base value for negative numbers. Will treat all numbers below this value\r\n * as negative numbers.\r\n */\r\n _this._negativeBase = 0;\r\n /**\r\n * A base unit to consider values are in.\r\n *\r\n * @default \"s\"\r\n */\r\n _this._baseUnit = \"second\";\r\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\r\n _this._outputFormat = \"svg\";\r\n /**\r\n * How many milliseconds each unit represents.\r\n */\r\n _this._unitValues = {\r\n \"millisecond\": 1,\r\n \"second\": 1000,\r\n \"minute\": 60000,\r\n \"hour\": 3600000,\r\n \"day\": 86400000,\r\n \"week\": 604800000,\r\n \"month\": 2592000000,\r\n \"year\": 31536000000,\r\n };\r\n /**\r\n * Collection of aliases for units.\r\n */\r\n _this._unitAliases = {\r\n \"Y\": \"y\",\r\n \"D\": \"d\",\r\n \"H\": \"h\",\r\n \"K\": \"h\",\r\n \"k\": \"h\",\r\n \"n\": \"S\"\r\n };\r\n _this.className = \"DurationFormatter\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Formats the number according as duration.\r\n *\r\n * For example `1000` (base unit seconds) would be converted to `16:40` as in\r\n * 16 minutes and 40 seconds.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Tutorial on duration formatting\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @param base Override base unit\r\n * @return Formatted number\r\n */\r\n DurationFormatter.prototype.format = function (value, format, base) {\r\n // no language?\r\n if (!this.language) {\r\n if (this.sprite) {\r\n this.language = this.sprite.language;\r\n }\r\n else {\r\n this.language = new Language;\r\n }\r\n }\r\n // no base unit?\r\n var baseUnit = base || this._baseUnit;\r\n // no format passed in or empty\r\n if (typeof format === \"undefined\" || format === \"\") {\r\n if ($type.hasValue(this.durationFormat)) {\r\n format = this.durationFormat;\r\n }\r\n else {\r\n format = this.getFormat($type.toNumber(value), null, baseUnit);\r\n }\r\n }\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // get format info (it will also deal with parser caching)\r\n var info = this.parseFormat(format, baseUnit);\r\n // cast to number just in case\r\n // TODO: maybe use better casting\r\n var source = Number(value);\r\n // format and replace the number\r\n var details;\r\n if (source > this._negativeBase) {\r\n details = info.positive;\r\n }\r\n else if (source < this._negativeBase) {\r\n details = info.negative;\r\n }\r\n else {\r\n details = info.zero;\r\n }\r\n // Format\r\n var formatted = this.applyFormat(source, details);\r\n // Apply color?\r\n if (details.color !== \"\") {\r\n if (this._outputFormat === \"svg\") {\r\n formatted = \"\" + formatted + \"\";\r\n }\r\n else if (this._outputFormat === \"html\") {\r\n formatted = \"\" + formatted + \"\";\r\n }\r\n }\r\n return formatted;\r\n };\r\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param base Override base unit\r\n * @return Parsed information\r\n */\r\n DurationFormatter.prototype.parseFormat = function (format, base) {\r\n var _this = this;\r\n // Check cache\r\n var cached = this.getCache(format);\r\n if ($type.hasValue(cached)) {\r\n return cached;\r\n }\r\n // no base unit?\r\n var baseUnit = base || this._baseUnit;\r\n // Initialize duration parsing info\r\n var info = {\r\n \"positive\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n },\r\n \"negative\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n },\r\n \"zero\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n }\r\n };\r\n // Escape double vertical bars (that mean display one vertical bar)\r\n format = format.replace(\"||\", $strings.PLACEHOLDER2);\r\n // Split it up and deal with different formats\r\n var parts = format.split(\"|\");\r\n info.positive.source = parts[0];\r\n if (typeof parts[2] === \"undefined\") {\r\n info.zero = info.positive;\r\n }\r\n else {\r\n info.zero.source = parts[2];\r\n }\r\n if (typeof parts[1] === \"undefined\") {\r\n info.negative = info.positive;\r\n }\r\n else {\r\n info.negative.source = parts[1];\r\n }\r\n // Parse each\r\n $object.each(info, function (part, item) {\r\n // Already parsed\r\n if (item.parsed) {\r\n return;\r\n }\r\n // Check cached\r\n if (typeof _this.getCache(item.source) !== \"undefined\") {\r\n info[part] = _this.getCache(item.source);\r\n return;\r\n }\r\n // Begin parsing\r\n var partFormat = item.source;\r\n // Check for [] directives\r\n var dirs = [];\r\n dirs = item.source.match(/^\\[([^\\]]*)\\]/);\r\n if (dirs && dirs.length && dirs[0] !== \"\") {\r\n partFormat = item.source.substr(dirs[0].length);\r\n item.color = dirs[1];\r\n }\r\n // Let TextFormatter split into chunks\r\n var chunks = getTextFormatter().chunk(partFormat, true);\r\n for (var i = 0; i < chunks.length; i++) {\r\n var chunk = chunks[i];\r\n // replace back double vertical bar\r\n chunk.text = chunk.text.replace($strings.PLACEHOLDER2, \"|\");\r\n if (chunk.type === \"value\") {\r\n // Just \"Duration\"?\r\n // if (chunk.text.toLowerCase() === \"duration\") {\r\n // \tchunk.text = durationFormat;\r\n // }\r\n // Check for \"a\" (absolute) modifier\r\n if (chunk.text.match(/[yYMdDwhHKkmsSn]+a/)) {\r\n item.absolute = true;\r\n chunk.text = chunk.text.replace(/([yYMdDwhHKkmsSn]+)a/, \"$1\");\r\n }\r\n // Find all possible parts\r\n var matches = chunk.text.match(/y+|Y+|M+|d+|D+|w+|h+|H+|K+|k+|m+|s+|S+|n+/g);\r\n if (matches) {\r\n // Populate template\r\n for (var x = 0; x < matches.length; x++) {\r\n // Is it an alias?\r\n if (!$type.hasValue(matches[x])) {\r\n matches[x] = _this._unitAliases[matches[x]];\r\n }\r\n item.parts.push(matches[x]);\r\n chunk.text = chunk.text.replace(matches[x], $strings.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n // Apply to template\r\n item.template += chunk.text;\r\n }\r\n // Apply style formatting\r\n //item.template = getTextFormatter().format(item.template, this.outputFormat);\r\n // Save cache\r\n _this.setCache(item.source, item);\r\n // Mark this as parsed\r\n item.parsed = true;\r\n });\r\n // Save cache (the whole thing)\r\n this.setCache(format, info);\r\n return info;\r\n };\r\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by {parseFormat}\r\n * @return Formatted duration\r\n */\r\n DurationFormatter.prototype.applyFormat = function (value, details) {\r\n // Use absolute values\r\n var negative = !details.absolute && (value < this._negativeBase);\r\n value = Math.abs(value);\r\n // Recalculate to milliseconds\r\n var tstamp = this.toTimeStamp(value, details.baseUnit);\r\n // Init return value\r\n var res = details.template;\r\n // Iterate through duration parts\r\n for (var i = 0, len = details.parts.length; i < len; i++) {\r\n // Gather the part\r\n var part = details.parts[i];\r\n var unit = this.toTimeUnit(part.substr(0, 1));\r\n var digits = part.length;\r\n // Calculate current unit value\r\n var ints = Math.floor(tstamp / this._unitValues[unit]);\r\n res = res.replace($strings.PLACEHOLDER, $utils.padString(ints, digits, \"0\"));\r\n // Reduce timestamp\r\n tstamp -= ints * this._unitValues[unit];\r\n }\r\n // Reapply negative sign\r\n if (negative) {\r\n res = \"-\" + res;\r\n }\r\n return res;\r\n };\r\n /**\r\n * Converts numeric value to timestamp in milliseconds.\r\n *\r\n * @param value A source value\r\n * @param baseUnit Base unit the source value is in: \"q\", \"s\", \"i\", \"h\", \"d\", \"w\", \"m\", \"y\"\r\n * @return Value representation as a timestamp in milliseconds\r\n */\r\n DurationFormatter.prototype.toTimeStamp = function (value, baseUnit) {\r\n return value * this._unitValues[baseUnit];\r\n };\r\n DurationFormatter.prototype.toTimeUnit = function (code) {\r\n switch (code) {\r\n case \"S\":\r\n return \"millisecond\";\r\n case \"s\":\r\n return \"second\";\r\n case \"m\":\r\n return \"minute\";\r\n case \"h\":\r\n return \"hour\";\r\n case \"d\":\r\n return \"day\";\r\n case \"w\":\r\n return \"week\";\r\n case \"M\":\r\n return \"month\";\r\n case \"y\":\r\n return \"year\";\r\n }\r\n ;\r\n };\r\n /**\r\n * Invalidates the parent [[Sprite]] object.\r\n */\r\n DurationFormatter.prototype.invalidateSprite = function () {\r\n if (this.sprite) {\r\n this.sprite.invalidate();\r\n }\r\n };\r\n Object.defineProperty(DurationFormatter.prototype, \"baseUnit\", {\r\n /**\r\n * @return Base unit\r\n */\r\n get: function () {\r\n return this._baseUnit;\r\n },\r\n /**\r\n * Base unit the values are in.\r\n *\r\n * A base unit will be used to recalculate the numeric value to millisecond\r\n * timestamps.\r\n *\r\n * Available options:\r\n *\r\n * * \"millisecond\"\r\n * * \"second\"\r\n * * \"minute\"\r\n * * \"hour\"\r\n * * \"day\"\r\n * * \"week\"\r\n * * \"month\"\r\n * * \"year\"\r\n *\r\n * @default \"s\"\r\n * @param baseUnit A base unit\r\n */\r\n set: function (baseUnit) {\r\n this._baseUnit = baseUnit;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DurationFormatter.prototype, \"outputFormat\", {\r\n /**\r\n * Getter for output format.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Output format\r\n */\r\n get: function () {\r\n return this._outputFormat;\r\n },\r\n /**\r\n * Setter for output format: \"svg\" or \"html.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Output format\r\n */\r\n set: function (outputFormat) {\r\n this._outputFormat = outputFormat.toLowerCase();\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns appropriate default format for the value.\r\n *\r\n * If `maxValue` is sepcified, it will use that value to determine the time\r\n * unit for the format.\r\n *\r\n * For example if your `baseUnit` is `\"second\"` and you pass in `10`, you\r\n * will get `\"10\"`.\r\n *\r\n * However, you might want it to be formatted in the context of bigger scale,\r\n * say 10 minutes (600 seconds). If you pass in `600` as `maxValue`, all\r\n * values, including small ones will use format with minutes, e.g.:\r\n * `00:10`, `00:50`, `12: 30`, etc.\r\n *\r\n * @param value Value to format\r\n * @param maxValue Maximum value to be used to determine format\r\n * @param baseUnit Base unit of the value\r\n * @return Format\r\n */\r\n DurationFormatter.prototype.getFormat = function (value, maxValue, baseUnit) {\r\n // Is format override set?\r\n if ($type.hasValue(this.durationFormat)) {\r\n return this.durationFormat;\r\n }\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.baseUnit;\r\n }\r\n if ($type.hasValue(maxValue) && value != maxValue) {\r\n value = Math.abs(value);\r\n maxValue = Math.abs(maxValue);\r\n var maxUnit = this.getValueUnit($math.max(value, maxValue), baseUnit);\r\n //let diffUnit = this.getValueUnit(Math.abs(maxValue - value), baseUnit);\r\n //console.log(maxUnit, diffUnit);\r\n return this.durationFormats[baseUnit][maxUnit];\r\n }\r\n else {\r\n var unit = this.getValueUnit(value, baseUnit);\r\n return this.durationFormats[baseUnit][unit];\r\n }\r\n };\r\n /**\r\n * Returns value's closest denominator time unit, e.g 100 seconds is\r\n * `\"minute\"`, while 59 seconds would still be `second`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Denominator\r\n */\r\n DurationFormatter.prototype.getValueUnit = function (value, baseUnit) {\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.baseUnit;\r\n }\r\n // Convert to milliseconds\r\n var currentUnit;\r\n var ms = this.getMilliseconds(value, baseUnit);\r\n $object.eachContinue(this._unitValues, function (key, val) {\r\n if (key == baseUnit || currentUnit) {\r\n var num = ms / val;\r\n if (num <= 1) {\r\n if (!currentUnit) {\r\n currentUnit = key;\r\n }\r\n return false;\r\n }\r\n currentUnit = key;\r\n }\r\n return true;\r\n });\r\n return currentUnit;\r\n };\r\n /**\r\n * Converts value to milliseconds according to `baseUnit`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Value in milliseconds\r\n */\r\n DurationFormatter.prototype.getMilliseconds = function (value, baseUnit) {\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.baseUnit;\r\n }\r\n return value * this._unitValues[baseUnit];\r\n };\r\n Object.defineProperty(DurationFormatter.prototype, \"durationFormat\", {\r\n /**\r\n * @return Format\r\n */\r\n get: function () {\r\n return this._durationFormat;\r\n },\r\n /**\r\n * If set, this format will be used instead of the one determined dynamically\r\n * based on the basedUnit and range of values.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} Available fomatting codes\r\n * @param value Format\r\n */\r\n set: function (value) {\r\n if (this._durationFormat != value) {\r\n this._durationFormat = value;\r\n this.invalidateSprite();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DurationFormatter.prototype, \"durationFormats\", {\r\n /**\r\n * @return Formats\r\n */\r\n get: function () {\r\n if (!this._durationFormats) {\r\n this._durationFormats = {\r\n \"millisecond\": {\r\n \"millisecond\": this.language.translate(\"_duration_millisecond\"),\r\n \"second\": this.language.translate(\"_duration_millisecond_second\"),\r\n \"minute\": this.language.translate(\"_duration_millisecond_minute\"),\r\n \"hour\": this.language.translate(\"_duration_millisecond_hour\"),\r\n \"day\": this.language.translate(\"_duration_millisecond_day\"),\r\n \"week\": this.language.translate(\"_duration_millisecond_week\"),\r\n \"month\": this.language.translate(\"_duration_millisecond_month\"),\r\n \"year\": this.language.translate(\"_duration_millisecond_year\")\r\n },\r\n \"second\": {\r\n \"second\": this.language.translate(\"_duration_second\"),\r\n \"minute\": this.language.translate(\"_duration_second_minute\"),\r\n \"hour\": this.language.translate(\"_duration_second_hour\"),\r\n \"day\": this.language.translate(\"_duration_second_day\"),\r\n \"week\": this.language.translate(\"_duration_second_week\"),\r\n \"month\": this.language.translate(\"_duration_second_month\"),\r\n \"year\": this.language.translate(\"_duration_second_year\")\r\n },\r\n \"minute\": {\r\n \"minute\": this.language.translate(\"_duration_minute\"),\r\n \"hour\": this.language.translate(\"_duration_minute_hour\"),\r\n \"day\": this.language.translate(\"_duration_minute_day\"),\r\n \"week\": this.language.translate(\"_duration_minute_week\"),\r\n \"month\": this.language.translate(\"_duration_minute_month\"),\r\n \"year\": this.language.translate(\"_duration_minute_year\")\r\n },\r\n \"hour\": {\r\n \"hour\": this.language.translate(\"_duration_hour\"),\r\n \"day\": this.language.translate(\"_duration_hour_day\"),\r\n \"week\": this.language.translate(\"_duration_hour_week\"),\r\n \"month\": this.language.translate(\"_duration_hour_month\"),\r\n \"year\": this.language.translate(\"_duration_hour_year\")\r\n },\r\n \"day\": {\r\n \"day\": this.language.translate(\"_duration_day\"),\r\n \"week\": this.language.translate(\"_duration_day_week\"),\r\n \"month\": this.language.translate(\"_duration_day_month\"),\r\n \"year\": this.language.translate(\"_duration_day_year\")\r\n },\r\n \"week\": {\r\n \"week\": this.language.translate(\"_duration_week\"),\r\n \"month\": this.language.translate(\"_duration_week_month\"),\r\n \"year\": this.language.translate(\"_duration_week_year\")\r\n },\r\n \"month\": {\r\n \"month\": this.language.translate(\"_duration_month\"),\r\n \"year\": this.language.translate(\"_duration_month_year\")\r\n },\r\n \"year\": {\r\n \"year\": this.language.translate(\"_duration_year\")\r\n }\r\n };\r\n }\r\n return this._durationFormats;\r\n },\r\n /**\r\n * Duration formats for various combination of base units.\r\n *\r\n * @param value Formats\r\n */\r\n set: function (value) {\r\n this._durationFormats = value;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DurationFormatter;\r\n}(BaseObject));\r\nexport { DurationFormatter };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DurationFormatter\"] = DurationFormatter;\r\n//# sourceMappingURL=DurationFormatter.js.map","/**\r\n * Handles date and time formatting\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Language } from \"../utils/Language\";\r\nimport { BaseObject } from \"../Base\";\r\nimport { getTextFormatter } from \"../formatters/TextFormatter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $strings from \"../utils/Strings\";\r\nimport * as $utils from \"../utils/Utils\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * Handles date and time formatting.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/} Tutorial on date/time formatting\r\n * @todo Better type casting of passed in date?\r\n * @todo Quarter support?\r\n * @todo When parsing named months make the search case-insensitive\r\n * @todo Escape a.m./p.m. properly when used in RegEx\r\n */\r\nvar DateFormatter = /** @class */ (function (_super) {\r\n tslib_1.__extends(DateFormatter, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DateFormatter() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Date format.\r\n */\r\n _this._dateFormat = \"yyyy-MM-dd\";\r\n /**\r\n * Input date format.\r\n */\r\n _this._inputDateFormat = \"yyyy-MM-dd\";\r\n /**\r\n * Assume UTC time zone.\r\n */\r\n _this._utc = false;\r\n /**\r\n * First day of week.\r\n *\r\n * 0 - Sunday\r\n * 1 - Monday\r\n *\r\n * Etc.\r\n */\r\n _this._firstDayOfWeek = 1;\r\n /**\r\n * A list of month names.\r\n */\r\n _this._months = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n /**\r\n * A list of short month names.\r\n *\r\n * @param {Array}\r\n */\r\n _this._monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May(short)\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n /**\r\n * A list of weekday names.\r\n */\r\n _this._weekdays = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n /**\r\n * A list of short weekday names.\r\n */\r\n _this._weekdaysShort = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n /**\r\n * Output format to produce. If the format calls for applying color to the\r\n * formatted value, this setting will determine what markup to use: SVG or\r\n * HTML.\r\n *\r\n * Available options: svg, html.\r\n *\r\n * @default \"svg\"\r\n */\r\n _this._outputFormat = \"svg\";\r\n /**\r\n * Should the first letter of the formatted date be capitalized?\r\n *\r\n * @default true\r\n */\r\n _this.capitalize = true;\r\n _this.className = \"DateFormatter\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(DateFormatter.prototype, \"language\", {\r\n /**\r\n * @return Language\r\n */\r\n get: function () {\r\n return this._language;\r\n },\r\n /**\r\n * A reference to [[Language]] object.\r\n *\r\n * @param value Language\r\n */\r\n set: function (value) {\r\n this._language = value;\r\n this.dateFormat = this._language.translate(\"_date\");\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Formats the date value according to specified format.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/} Tutorial on date/time formatting\r\n * @param source Date value\r\n * @param format Format\r\n * @return Formatted date string\r\n */\r\n DateFormatter.prototype.format = function (source, format) {\r\n // No language?\r\n if (!this.language) {\r\n if (this.sprite) {\r\n this.language = this.sprite.language;\r\n }\r\n else {\r\n this.language = new Language();\r\n }\r\n }\r\n // No format passed in or it's empty\r\n if (typeof format === \"undefined\" || format === \"\") {\r\n format = this._dateFormat;\r\n }\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // get format info (it will also deal with parser caching)\r\n var info = this.parseFormat(format);\r\n // Do casting if required\r\n // This will take care of timestamps as well as Date objects\r\n var date;\r\n if ($type.isString(source)) {\r\n // If it's a string, let's try parsing it using our own functionality\r\n date = this.parse(source);\r\n }\r\n else {\r\n date = $utils.anyToDate(source);\r\n }\r\n // Should we apply custom time zone?\r\n if ($type.hasValue(this.timezoneOffset)) {\r\n date.setMinutes(date.getMinutes() + date.getTimezoneOffset() - this.timezoneOffset);\r\n }\r\n // Check if it's a valid date\r\n if (!$type.isNumber(date.getTime())) {\r\n return this.language.translate(\"Invalid date\");\r\n }\r\n // Apply format\r\n var formatted = this.applyFormat(date, info, this.language);\r\n // Capitalize\r\n if (this.capitalize) {\r\n formatted = formatted.replace(/^.{1}/, formatted.substr(0, 1).toUpperCase());\r\n }\r\n // We're done\r\n return formatted;\r\n };\r\n /**\r\n * Parses format into structured infromation.\r\n *\r\n * @param format Format template\r\n */\r\n DateFormatter.prototype.parseFormat = function (format) {\r\n // Check cache\r\n var cached = this.getCache(format);\r\n if ($type.hasValue(cached)) {\r\n return cached;\r\n }\r\n // Init format parse info holder\r\n var info = {\r\n \"template\": \"\",\r\n \"parts\": []\r\n };\r\n // Let TextFormatter split into chunks\r\n var chunks = getTextFormatter().chunk(format, true);\r\n for (var i = 0; i < chunks.length; i++) {\r\n var chunk = chunks[i];\r\n if (chunk.type === \"value\") {\r\n // Just \"Date\"?\r\n if (chunk.text.match(/^date$/i)) {\r\n chunk.text = this._dateFormat;\r\n }\r\n // Find all possible parts\r\n var matches = chunk.text.match(/G|yyyy|yyy|yy|y|YYYY|YYY|YY|Y|u|MMMMM|MMMM|MMM|MM|M|ww|w|W|dd|d|DDD|DD|D|F|g|EEEEE|EEEE|EEE|EE|E|eeeee|eeee|eee|ee|e|aaa|aa|a|hh|h|HH|H|KK|K|kk|k|mm|m|ss|s|SSS|SS|S|A|zzzz|zzz|zz|z|ZZ|Z|t|x|nnn|nn|n|i|I/g);\r\n // Found?\r\n if (matches) {\r\n // Populate template\r\n for (var x = 0; x < matches.length; x++) {\r\n info.parts.push(matches[x]);\r\n chunk.text = chunk.text.replace(matches[x], $strings.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n // Apply to template\r\n info.template += chunk.text;\r\n }\r\n // Apply style formatting\r\n //info.template = getTextFormatter().format(info.template, this.outputFormat);\r\n // Save cache\r\n this.setCache(format, info);\r\n return info;\r\n };\r\n /**\r\n * Applies format to Date.\r\n *\r\n * @param date Date object\r\n * @param info Parsed format information\r\n * @param language Language\r\n * @return Formatted date string\r\n */\r\n DateFormatter.prototype.applyFormat = function (date, info, language) {\r\n // Init return value\r\n var res = info.template;\r\n // Get values\r\n var fullYear, month, weekday, day, hours, minutes, seconds, milliseconds, offset = date.getTimezoneOffset(), timestamp = date.getTime();\r\n if (this.utc) {\r\n fullYear = date.getUTCFullYear();\r\n month = date.getUTCMonth();\r\n weekday = date.getUTCDay();\r\n day = date.getUTCDate();\r\n hours = date.getUTCHours();\r\n minutes = date.getUTCMinutes();\r\n seconds = date.getUTCSeconds();\r\n milliseconds = date.getUTCMilliseconds();\r\n }\r\n else {\r\n fullYear = date.getFullYear();\r\n month = date.getMonth();\r\n weekday = date.getDay();\r\n day = date.getDate();\r\n hours = date.getHours();\r\n minutes = date.getMinutes();\r\n seconds = date.getSeconds();\r\n milliseconds = date.getMilliseconds();\r\n }\r\n // Go through each part and format/replace it in template\r\n for (var i = 0, len = info.parts.length; i < len; i++) {\r\n var value = \"\";\r\n switch (info.parts[i]) {\r\n case \"G\":\r\n value = language.translate(fullYear < 0\r\n ? \"_era_bc\"\r\n : \"_era_ad\");\r\n break;\r\n case \"yyyy\":\r\n value = Math.abs(fullYear).toString();\r\n if (fullYear < 0) {\r\n value += language.translate(\"_era_bc\");\r\n }\r\n break;\r\n case \"yyy\":\r\n case \"yy\":\r\n case \"y\":\r\n value = Math.abs(fullYear).toString().substr(-info.parts[i].length);\r\n if (fullYear < 0) {\r\n value += language.translate(\"_era_bc\");\r\n }\r\n break;\r\n case \"YYYY\":\r\n case \"YYY\":\r\n case \"YY\":\r\n case \"Y\":\r\n var week = $utils.getWeek(date);\r\n var year = fullYear;\r\n if (week == 1 && (weekday > 1)) {\r\n year--;\r\n }\r\n if (info.parts[i] == \"YYYY\") {\r\n value = Math.abs(year).toString();\r\n }\r\n else {\r\n value = Math.abs(year).toString().substr(-info.parts[i].length);\r\n }\r\n if (year < 0) {\r\n value += language.translate(\"_era_bc\");\r\n }\r\n break;\r\n case \"u\":\r\n // @todo\r\n break;\r\n case \"MMMMM\":\r\n value = language.translate(this._months[month]).substr(0, 1);\r\n break;\r\n case \"MMMM\":\r\n value = language.translate(this._months[month]);\r\n break;\r\n case \"MMM\":\r\n value = language.translate(this._monthsShort[month]);\r\n break;\r\n case \"MM\":\r\n value = $utils.padString(month + 1, 2, \"0\");\r\n break;\r\n case \"M\":\r\n value = (month + 1).toString();\r\n break;\r\n case \"ww\":\r\n value = $utils.padString($utils.getWeek(date, this.utc), 2, \"0\");\r\n break;\r\n case \"w\":\r\n value = $utils.getWeek(date, this.utc).toString();\r\n break;\r\n case \"W\":\r\n value = $utils.getMonthWeek(date, this.utc).toString();\r\n break;\r\n case \"dd\":\r\n value = $utils.padString(day, 2, \"0\");\r\n break;\r\n case \"d\":\r\n value = day.toString();\r\n break;\r\n case \"DD\":\r\n case \"DDD\":\r\n value = $utils.padString($utils.getYearDay(date, this.utc).toString(), info.parts[i].length, \"0\");\r\n break;\r\n case \"D\":\r\n value = $utils.getYearDay(date, this.utc).toString();\r\n break;\r\n case \"F\":\r\n // @todo\r\n break;\r\n case \"g\":\r\n // @todo\r\n break;\r\n case \"t\":\r\n value = language.translateFunc(\"_dateOrd\").call(this, day);\r\n break;\r\n case \"E\":\r\n value = (weekday || 7).toString();\r\n break;\r\n case \"EE\":\r\n value = $utils.padString((weekday || 7).toString(), 2, \"0\");\r\n break;\r\n case \"EEE\":\r\n case \"eee\":\r\n value = language.translate(this._weekdaysShort[weekday]);\r\n break;\r\n case \"EEEE\":\r\n case \"eeee\":\r\n value = language.translate(this._weekdays[weekday]);\r\n break;\r\n case \"EEEEE\":\r\n case \"eeeee\":\r\n value = language.translate(this._weekdays[weekday]).substr(0, 1);\r\n break;\r\n case \"e\":\r\n case \"ee\":\r\n value = (weekday - this.firstDayOfWeek + 1).toString();\r\n if (info.parts[i] == \"ee\") {\r\n value = $utils.padString(value, 2, \"0\");\r\n }\r\n break;\r\n case \"a\":\r\n if (hours >= 12) {\r\n value = language.translate(\"PM\");\r\n }\r\n else {\r\n value = language.translate(\"AM\");\r\n }\r\n break;\r\n case \"aa\":\r\n if (hours >= 12) {\r\n value = language.translate(\"P.M.\");\r\n }\r\n else {\r\n value = language.translate(\"A.M.\");\r\n }\r\n break;\r\n case \"aaa\":\r\n if (hours >= 12) {\r\n value = language.translate(\"P\");\r\n }\r\n else {\r\n value = language.translate(\"A\");\r\n }\r\n break;\r\n case \"h\":\r\n value = $utils.get12Hours(hours).toString();\r\n break;\r\n case \"hh\":\r\n value = $utils.padString($utils.get12Hours(hours), 2, \"0\");\r\n break;\r\n case \"H\":\r\n value = hours.toString();\r\n break;\r\n case \"HH\":\r\n value = $utils.padString(hours, 2, \"0\");\r\n break;\r\n case \"K\":\r\n value = $utils.get12Hours(hours, 0).toString();\r\n break;\r\n case \"KK\":\r\n value = $utils.padString($utils.get12Hours(hours, 0), 2, \"0\");\r\n break;\r\n case \"k\":\r\n value = (hours + 1).toString();\r\n break;\r\n case \"kk\":\r\n value = $utils.padString(hours + 1, 2, \"0\");\r\n break;\r\n case \"m\":\r\n value = minutes.toString();\r\n break;\r\n case \"mm\":\r\n value = $utils.padString(minutes, 2, \"0\");\r\n break;\r\n case \"s\":\r\n value = seconds.toString();\r\n break;\r\n case \"ss\":\r\n value = $utils.padString(seconds, 2, \"0\");\r\n break;\r\n case \"S\":\r\n case \"SS\":\r\n case \"SSS\":\r\n value = Math.round((milliseconds / 1000) * Math.pow(10, info.parts[i].length)).toString();\r\n break;\r\n case \"x\":\r\n value = timestamp.toString();\r\n break;\r\n case \"n\":\r\n case \"nn\":\r\n case \"nnn\":\r\n value = $utils.padString(milliseconds, info.parts[i].length, \"0\");\r\n break;\r\n case \"z\":\r\n value = $utils.getTimeZone(date, false, false, this.utc);\r\n break;\r\n case \"zz\":\r\n value = $utils.getTimeZone(date, true, false, this.utc);\r\n break;\r\n case \"zzz\":\r\n value = $utils.getTimeZone(date, false, true, this.utc);\r\n break;\r\n case \"zzzz\":\r\n value = $utils.getTimeZone(date, true, true, this.utc);\r\n break;\r\n case \"Z\":\r\n case \"ZZ\":\r\n var tz = Math.abs(offset) / 60;\r\n var tzh = Math.floor(tz);\r\n var tzm = tz * 60 - tzh * 60;\r\n if (this.utc) {\r\n tzh = 0;\r\n tzm = 0;\r\n }\r\n if (info.parts[i] == \"Z\") {\r\n value = \"GMT\";\r\n value += offset > 0 ? \"-\" : \"+\";\r\n value += $utils.padString(tzh, 2) + \":\" + $utils.padString(tzm, 2);\r\n }\r\n else {\r\n value = offset > 0 ? \"-\" : \"+\";\r\n value += $utils.padString(tzh, 2) + $utils.padString(tzm, 2);\r\n }\r\n break;\r\n case \"i\":\r\n value = date.toISOString();\r\n break;\r\n case \"I\":\r\n value = date.toUTCString();\r\n break;\r\n }\r\n res = res.replace($strings.PLACEHOLDER, value);\r\n }\r\n return res;\r\n };\r\n /**\r\n * Parses any input value into Date object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Parsing_Dates} Tutorial on date/time parsing\r\n * @param source Source value\r\n * @param format Source format\r\n * @return Date object\r\n */\r\n DateFormatter.prototype.parse = function (source, format) {\r\n // Format set?\r\n if (!$type.hasValue(format)) {\r\n format = this.inputDateFormat;\r\n }\r\n // Is it already a Date\r\n if (source instanceof Date) {\r\n return source;\r\n }\r\n // Is it a numeric timestamp\r\n if (typeof source === \"number\") {\r\n return new Date(source);\r\n }\r\n // No? Let's check if it's string, and try converting to it if nec\r\n if (typeof source !== \"string\") {\r\n source = source.toString();\r\n }\r\n // no language?\r\n if (!this.language) {\r\n if (this.sprite) {\r\n this.language = this.sprite.language;\r\n }\r\n else {\r\n this.language = new Language;\r\n }\r\n }\r\n // Init return value\r\n var res = new Date(1970, 0, 1, 0, 0, 0);\r\n // Init RegEx for parsing\r\n var reg = \"\";\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // Clip format to length of the source string\r\n format = format.substr(0, source.length);\r\n // Parse format\r\n var info = this.parseFormat(format);\r\n // Init parsed items holder\r\n var parsedIndexes = {\r\n \"year\": -1,\r\n \"year3\": -1,\r\n \"year2\": -1,\r\n \"year1\": -1,\r\n \"month\": -1,\r\n \"monthShort\": -1,\r\n \"monthLong\": -1,\r\n \"weekdayShort\": -1,\r\n \"weekdayLong\": -1,\r\n \"day\": -1,\r\n \"yearDay\": -1,\r\n \"week\": -1,\r\n \"hourBase0\": -1,\r\n \"hour12Base0\": -1,\r\n \"hourBase1\": -1,\r\n \"hour12Base1\": -1,\r\n \"minute\": -1,\r\n \"second\": -1,\r\n \"millisecond\": -1,\r\n \"millisecondDigits\": -1,\r\n \"am\": -1,\r\n \"zone\": -1,\r\n \"timestamp\": -1,\r\n \"iso\": -1\r\n };\r\n // Index adjuster\r\n var indexAdjust = 0, index = 0;\r\n // Iterate through all of the parts\r\n for (var i = 0; i < info.parts.length; i++) {\r\n // Set current match index\r\n index = i + indexAdjust + 1;\r\n switch (info.parts[i]) {\r\n case \"yyyy\":\r\n case \"YYYY\":\r\n reg += \"([0-9]{4})\";\r\n parsedIndexes.year = index;\r\n break;\r\n case \"yyy\":\r\n case \"YYY\":\r\n reg += \"([0-9]{3})\";\r\n parsedIndexes.year3 = index;\r\n break;\r\n case \"yy\":\r\n case \"YY\":\r\n reg += \"([0-9]{2})\";\r\n parsedIndexes.year2 = index;\r\n break;\r\n case \"y\":\r\n case \"Y\":\r\n reg += \"([0-9]{1})\";\r\n parsedIndexes.year1 = index;\r\n break;\r\n case \"MMMM\":\r\n reg += \"(\" + this.getStringList(this._months).join(\"|\") + \")\";\r\n parsedIndexes.monthLong = index;\r\n break;\r\n case \"MMM\":\r\n reg += \"(\" + this.getStringList(this._monthsShort).join(\"|\") + \")\";\r\n parsedIndexes.monthShort = index;\r\n break;\r\n case \"MM\":\r\n case \"M\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.month = index;\r\n break;\r\n case \"ww\":\r\n case \"w\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.week = index;\r\n break;\r\n case \"dd\":\r\n case \"d\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.day = index;\r\n break;\r\n case \"DDD\":\r\n case \"DD\":\r\n case \"D\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.yearDay = index;\r\n break;\r\n case \"dddd\":\r\n reg += \"(\" + this.getStringList(this._weekdays).join(\"|\") + \")\";\r\n parsedIndexes.weekdayLong = index;\r\n break;\r\n case \"ddd\":\r\n reg += \"(\" + this.getStringList(this._weekdaysShort).join(\"|\") + \")\";\r\n parsedIndexes.weekdayShort = index;\r\n break;\r\n case \"aaa\":\r\n case \"aa\":\r\n case \"a\":\r\n // TODO: fix (escape regex)\r\n reg += \"(\" + this.getStringList([\"AM\", \"PM\", \"A\\.M\\.\", \"P\\.M\\.\", \"A\", \"P\"]).join(\"|\") + \")\";\r\n parsedIndexes.am = index;\r\n break;\r\n case \"hh\":\r\n case \"h\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hour12Base1 = index;\r\n break;\r\n case \"HH\":\r\n case \"H\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hourBase0 = index;\r\n break;\r\n case \"KK\":\r\n case \"K\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hour12Base0 = index;\r\n break;\r\n case \"kk\":\r\n case \"k\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hourBase1 = index;\r\n break;\r\n case \"mm\":\r\n case \"m\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.minute = index;\r\n break;\r\n case \"ss\":\r\n case \"s\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.second = index;\r\n break;\r\n case \"SSS\":\r\n case \"SS\":\r\n case \"S\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.millisecond = index;\r\n parsedIndexes.millisecondDigits = info.parts[i].length;\r\n break;\r\n case \"nnn\":\r\n case \"nn\":\r\n case \"n\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.millisecond = index;\r\n break;\r\n case \"x\":\r\n reg += \"([0-9]{1,})\";\r\n parsedIndexes.timestamp = index;\r\n break;\r\n case \"Z\":\r\n reg += \"GMT([-+]+[0-9]{2}:[0-9]{2})\";\r\n parsedIndexes.zone = index;\r\n break;\r\n case \"ZZ\":\r\n reg += \"([\\\\-+]+[0-9]{2}[0-9]{2})\";\r\n parsedIndexes.zone = index;\r\n break;\r\n case \"i\":\r\n reg += \"([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\\.([0-9]{3})([Zz]?)\";\r\n parsedIndexes.iso = index;\r\n indexAdjust += 7;\r\n break;\r\n case \"G\":\r\n case \"YYYY\":\r\n case \"YYY\":\r\n case \"YY\":\r\n case \"Y\":\r\n case \"MMMMM\":\r\n case \"W\":\r\n case \"EEEEE\":\r\n case \"EEEE\":\r\n case \"EEE\":\r\n case \"EE\":\r\n case \"E\":\r\n case \"eeeee\":\r\n case \"eeee\":\r\n case \"eee\":\r\n case \"ee\":\r\n case \"e\":\r\n case \"zzzz\":\r\n case \"zzz\":\r\n case \"zz\":\r\n case \"z\":\r\n case \"t\":\r\n // Ignore\r\n indexAdjust--;\r\n break;\r\n }\r\n reg += \"[^0-9]*\";\r\n }\r\n // Try matching\r\n var regex = new RegExp(reg);\r\n var matches = source.match(regex);\r\n if (matches) {\r\n // Populate the date object\r\n // Full year\r\n if (parsedIndexes.year > -1) {\r\n var val = parseInt(matches[parsedIndexes.year]);\r\n if (this.utc) {\r\n res.setUTCFullYear(val);\r\n }\r\n else {\r\n res.setFullYear(val);\r\n }\r\n }\r\n // 3-digit year\r\n if (parsedIndexes.year3 > -1) {\r\n var val = parseInt(matches[parsedIndexes.year3]);\r\n val += 1000;\r\n if (this.utc) {\r\n res.setUTCFullYear(val);\r\n }\r\n else {\r\n res.setFullYear(val);\r\n }\r\n }\r\n // 2-digit year\r\n if (parsedIndexes.year2 > -1) {\r\n var val = parseInt(matches[parsedIndexes.year2]);\r\n if (val > 50) {\r\n val += 1000;\r\n }\r\n else {\r\n val += 2000;\r\n }\r\n if (this.utc) {\r\n res.setUTCFullYear(val);\r\n }\r\n else {\r\n res.setFullYear(val);\r\n }\r\n }\r\n // 1-digit year\r\n if (parsedIndexes.year1 > -1) {\r\n var val = parseInt(matches[parsedIndexes.year1]);\r\n val = Math.floor((new Date().getFullYear()) / 10) * 10 + val;\r\n if (this.utc) {\r\n res.setUTCFullYear(val);\r\n }\r\n else {\r\n res.setFullYear(val);\r\n }\r\n }\r\n // Full month\r\n if (parsedIndexes.monthLong > -1) {\r\n var val = this.resolveMonth(matches[parsedIndexes.monthLong]);\r\n if (this.utc) {\r\n res.setUTCMonth(val);\r\n }\r\n else {\r\n res.setMonth(val);\r\n }\r\n }\r\n // Short month\r\n if (parsedIndexes.monthShort > -1) {\r\n var val = this.resolveShortMonth(matches[parsedIndexes.monthShort]);\r\n if (this.utc) {\r\n res.setUTCMonth(val);\r\n }\r\n else {\r\n res.setMonth(val);\r\n }\r\n }\r\n // Numeric month\r\n if (parsedIndexes.month > -1) {\r\n var val = parseInt(matches[parsedIndexes.month]) - 1;\r\n if (this.utc) {\r\n res.setUTCMonth(val);\r\n }\r\n else {\r\n res.setMonth(val);\r\n }\r\n }\r\n // Weekday\r\n // @todo\r\n // Week\r\n if ((parsedIndexes.week > -1) && (parsedIndexes.day === -1)) {\r\n // We parse weeks ONLY if day is not explicitly set\r\n // TODO: this needs work\r\n // (but maybe later - I can hardly imagine anyone passing their dates in weeks)\r\n var val = $utils.getDayFromWeek(parseInt(matches[parsedIndexes.week]), this.utc ? res.getUTCFullYear() : res.getFullYear(), 1, this.utc);\r\n if (this.utc) {\r\n res.setUTCMonth(0);\r\n res.setUTCDate(val);\r\n }\r\n else {\r\n res.setMonth(0);\r\n res.setDate(val);\r\n }\r\n }\r\n // Day\r\n if (parsedIndexes.day > -1) {\r\n var val = parseInt(matches[parsedIndexes.day]);\r\n if (this.utc) {\r\n res.setUTCDate(val);\r\n }\r\n else {\r\n res.setDate(val);\r\n }\r\n }\r\n // Year day\r\n if (parsedIndexes.yearDay > -1) {\r\n var val = parseInt(matches[parsedIndexes.yearDay]);\r\n if (this.utc) {\r\n res.setUTCMonth(0);\r\n res.setUTCDate(val);\r\n }\r\n else {\r\n res.setMonth(0);\r\n res.setDate(val);\r\n }\r\n }\r\n // 24 Hour (0-23)\r\n if (parsedIndexes.hourBase0 > -1) {\r\n var val = parseInt(matches[parsedIndexes.hourBase0]);\r\n if (this.utc) {\r\n res.setUTCHours(val);\r\n }\r\n else {\r\n res.setHours(val);\r\n }\r\n }\r\n // 24 Hour (1-24)\r\n if (parsedIndexes.hourBase1 > -1) {\r\n var val = parseInt(matches[parsedIndexes.hourBase1]) - 1;\r\n if (this.utc) {\r\n res.setUTCHours(val);\r\n }\r\n else {\r\n res.setHours(val);\r\n }\r\n }\r\n // 12 Hour (0-11)\r\n if (parsedIndexes.hour12Base0 > -1) {\r\n var val = parseInt(matches[parsedIndexes.hour12Base0]);\r\n if (val == 11) {\r\n val = 0;\r\n }\r\n if ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\r\n val += 12;\r\n }\r\n if (this.utc) {\r\n res.setUTCHours(val);\r\n }\r\n else {\r\n res.setHours(val);\r\n }\r\n }\r\n // 12 Hour (1-12)\r\n if (parsedIndexes.hour12Base1 > -1) {\r\n var val = parseInt(matches[parsedIndexes.hour12Base1]);\r\n if (val == 12) {\r\n val = 0;\r\n }\r\n if ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\r\n val += 12;\r\n }\r\n if (this.utc) {\r\n res.setUTCHours(val);\r\n }\r\n else {\r\n res.setHours(val);\r\n }\r\n }\r\n // Minute\r\n if (parsedIndexes.minute > -1) {\r\n var val = parseInt(matches[parsedIndexes.minute]);\r\n if (this.utc) {\r\n res.setUTCMinutes(val);\r\n }\r\n else {\r\n res.setMinutes(val);\r\n }\r\n }\r\n // Second\r\n if (parsedIndexes.second > -1) {\r\n var val = parseInt(matches[parsedIndexes.second]);\r\n if (this.utc) {\r\n res.setUTCSeconds(val);\r\n }\r\n else {\r\n res.setSeconds(val);\r\n }\r\n }\r\n // Millisecond\r\n if (parsedIndexes.millisecond > -1) {\r\n var val = parseInt(matches[parsedIndexes.millisecond]);\r\n if (parsedIndexes.millisecondDigits == 2) {\r\n val *= 10;\r\n }\r\n else if (parsedIndexes.millisecondDigits == 1) {\r\n val *= 100;\r\n }\r\n if (this.utc) {\r\n res.setUTCMilliseconds(val);\r\n }\r\n else {\r\n res.setMilliseconds(val);\r\n }\r\n }\r\n // Timestamp\r\n if (parsedIndexes.timestamp > -1) {\r\n res.setTime(parseInt(matches[parsedIndexes.timestamp]));\r\n }\r\n // Adjust time zone\r\n if (parsedIndexes.zone > -1) {\r\n var zone = matches[parsedIndexes.zone].replace(/:/, \"\");\r\n var match = $type.getValue(zone.match(/([+\\-]?)([0-9]{2})([0-9]{2})/));\r\n var dir = match[1];\r\n var hour = match[2];\r\n var minute = match[3];\r\n var offset = parseInt(hour) * 60 + parseInt(minute);\r\n // Adjust offset\r\n // Making it negative does not seem to make sense, but it's right\r\n // because of how JavaScript calculates GTM offsets\r\n if (dir == \"+\") {\r\n offset *= -1;\r\n }\r\n // Check the difference in offset\r\n var originalOffset = res.getTimezoneOffset();\r\n var diff = offset - originalOffset;\r\n if (diff != 0) {\r\n res.setMinutes(res.getMinutes() + diff);\r\n }\r\n }\r\n // ISO\r\n if (parsedIndexes.iso > -1) {\r\n if (matches[parsedIndexes.iso + 7] == \"Z\" || matches[parsedIndexes.iso + 7] == \"z\") {\r\n res = new Date();\r\n res.setUTCFullYear($type.toNumber(matches[parsedIndexes.iso + 0]));\r\n res.setUTCMonth($type.toNumber(matches[parsedIndexes.iso + 1]) - 1);\r\n res.setUTCDate($type.toNumber(matches[parsedIndexes.iso + 2]));\r\n res.setUTCHours($type.toNumber(matches[parsedIndexes.iso + 3]));\r\n res.setUTCMinutes($type.toNumber(matches[parsedIndexes.iso + 4]));\r\n res.setUTCSeconds($type.toNumber(matches[parsedIndexes.iso + 5]));\r\n res.setUTCMilliseconds($type.toNumber(matches[parsedIndexes.iso + 6]));\r\n }\r\n else {\r\n res = new Date($type.toNumber(matches[parsedIndexes.iso + 0]), $type.toNumber(matches[parsedIndexes.iso + 1]) - 1, $type.toNumber(matches[parsedIndexes.iso + 2]), $type.toNumber(matches[parsedIndexes.iso + 3]), $type.toNumber(matches[parsedIndexes.iso + 4]), $type.toNumber(matches[parsedIndexes.iso + 5]), $type.toNumber(matches[parsedIndexes.iso + 6]));\r\n }\r\n }\r\n }\r\n else {\r\n // Didn't match anything\r\n // Let's try dropping it into Date constructor and hope for the best\r\n res = new Date(source);\r\n }\r\n return res;\r\n };\r\n /**\r\n * Resolves month name (i.e. \"December\") into a month number (11).\r\n *\r\n * @param value Month name\r\n * @return Month number\r\n */\r\n DateFormatter.prototype.resolveMonth = function (value) {\r\n // Let's try English first\r\n var month = this._months.indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n // Try the translation\r\n if (this.language && !this.language.isDefault()) {\r\n month = this.language.translateAll(this._months).indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n }\r\n return 0;\r\n };\r\n /**\r\n * Resolves short month name (i.e. \"Dec\") into a month number.\r\n *\r\n * @param value Short month name\r\n * @return Month number\r\n */\r\n DateFormatter.prototype.resolveShortMonth = function (value) {\r\n // Let's try English first\r\n var month = this._monthsShort.indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n // Try the translation\r\n if (this.language && !this.language.isDefault()) {\r\n month = this.language.translateAll(this._monthsShort).indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n }\r\n return 0;\r\n };\r\n /**\r\n * Checks if passed in string represents AM/PM notation in many of its\r\n * versions.\r\n *\r\n * @param value Source string\r\n * @return Is it AM/PM?\r\n */\r\n DateFormatter.prototype.isAm = function (value) {\r\n var list = this.getStringList([\"AM\", \"A.M.\", \"A\"]);\r\n return list.indexOf(value.toUpperCase()) > -1;\r\n };\r\n /**\r\n * Invalidates related [[Sprite]] causing it to redraw.\r\n */\r\n DateFormatter.prototype.invalidateSprite = function () {\r\n if (this.sprite) {\r\n this.sprite.invalidate();\r\n }\r\n };\r\n /**\r\n * Translates list of strings.\r\n *\r\n * @param list Source strings\r\n * @return Translated strings\r\n */\r\n DateFormatter.prototype.getStringList = function (list) {\r\n var res = [];\r\n for (var i = 0; i < list.length; i++) {\r\n res.push($utils.escapeForRgex(list[i]));\r\n // translate?\r\n if (this.language && !this.language.isDefault()) {\r\n res.push($utils.escapeForRgex(this.language.translate(list[i])));\r\n }\r\n }\r\n return res;\r\n };\r\n Object.defineProperty(DateFormatter.prototype, \"dateFormat\", {\r\n /**\r\n * @return Date format\r\n */\r\n get: function () {\r\n return this._dateFormat;\r\n },\r\n /**\r\n * Date format to use.\r\n *\r\n * If format is not supplied in-line in the string, this setting will be\r\n * used.\r\n *\r\n * @default \"yyyy-MM-dd\"\r\n * @param value Date format\r\n */\r\n set: function (value) {\r\n this._dateFormat = value;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateFormatter.prototype, \"inputDateFormat\", {\r\n /**\r\n * @return Date format\r\n */\r\n get: function () {\r\n return this._inputDateFormat;\r\n },\r\n /**\r\n * Date format to use when parsing dates.\r\n *\r\n * @default \"yyyy-MM-dd\"\r\n * @param value Date format\r\n */\r\n set: function (value) {\r\n this._inputDateFormat = value;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateFormatter.prototype, \"utc\", {\r\n /**\r\n * @return Use UTC?\r\n */\r\n get: function () {\r\n return this._utc;\r\n },\r\n /**\r\n * Should formatter use UTC functions?\r\n *\r\n * If UTC is used, all date/time values will be independent on client's\r\n * time zone.\r\n *\r\n * @param value Use UTC?\r\n */\r\n set: function (value) {\r\n this._utc = value;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateFormatter.prototype, \"timezoneOffset\", {\r\n /**\r\n * @return Offset (minutes)\r\n */\r\n get: function () {\r\n return this._timezoneOffset;\r\n },\r\n /**\r\n * If set, will format date/time in specific time zone.\r\n *\r\n * The value is a number of minutes from target time zone to UTC.\r\n *\r\n * E.g. `300` will recalculate Dates in \"GMT-5\" time zone.\r\n *\r\n * @param value Offset (minutes)\r\n */\r\n set: function (value) {\r\n if (this._timezoneOffset != value) {\r\n this._timezoneOffset = value;\r\n this.invalidateSprite();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateFormatter.prototype, \"firstDayOfWeek\", {\r\n /**\r\n * @return First day of week\r\n */\r\n get: function () {\r\n return this._firstDayOfWeek;\r\n },\r\n /**\r\n * Dirst day of the week:\r\n *\r\n * * 0 - Sunday\r\n * * 1 - Monday\r\n * * 2 - Tuesday\r\n *\r\n * Etc.\r\n *\r\n * @param value First day of week\r\n */\r\n set: function (value) {\r\n this._firstDayOfWeek = value;\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateFormatter.prototype, \"outputFormat\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Format\r\n */\r\n get: function () {\r\n return this._outputFormat;\r\n },\r\n /**\r\n * Output format for the formatted date.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Format\r\n */\r\n set: function (value) {\r\n this._outputFormat = value.toLowerCase();\r\n this.invalidateSprite();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DateFormatter;\r\n}(BaseObject));\r\nexport { DateFormatter };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateFormatter\"] = DateFormatter;\r\n//# sourceMappingURL=DateFormatter.js.map","/**\r\n * Handles formatting of pseudo-markup in text.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { AMElement } from \"../rendering/AMElement\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $strings from \"../utils/Strings\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * Handles formatting of pseudo-markdown in text.\r\n *\r\n * @todo Encode < > in output\r\n * @todo Add more adapters\r\n * @important\r\n */\r\nvar TextFormatter = /** @class */ (function (_super) {\r\n tslib_1.__extends(TextFormatter, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TextFormatter() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n _this.className = \"TextFormatter\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n TextFormatter.prototype.debug = function () { };\r\n /**\r\n * Formats the text according to specifications passed in.\r\n *\r\n * @param text Text to format\r\n * @param output Output format (svg, html)\r\n * @return Formatted text\r\n */\r\n TextFormatter.prototype.format = function (text, output) {\r\n // Apply default\r\n if (!$type.hasValue(output)) {\r\n output = \"svg\";\r\n }\r\n // Init return value\r\n var formatted = \"\";\r\n // Replace double (escaped) square spaces with remporary codes\r\n text = this.escape(text);\r\n // Divvy up the string by style tags\r\n var styles = text.match(/\\[([^\\]]*?)\\]/gm);\r\n if (!styles) {\r\n // Nothing to do here - no formatting elements\r\n return this.wrap(text, \"\", output);\r\n }\r\n // Get pure text - no style tags\r\n var texts = text.split(/\\[[^\\[\\]]*\\]/);\r\n // Go through each of the texts and wrap it in style tags\r\n for (var i = 0, len = texts.length; i < len; i++) {\r\n // Get text bit\r\n var t = texts[i];\r\n // Check if string is empty\r\n if (t === \"\") {\r\n continue;\r\n }\r\n // Run through an adapter\r\n t = this.adapter.apply(\"chunk\", t);\r\n // Get related style\r\n var s = \"\";\r\n if (i > 0) {\r\n s = styles[i - 1].replace('[', '').replace(']', '');\r\n }\r\n // Wrap text in tag\r\n formatted += this.wrap(t, s, output);\r\n }\r\n // Replace placeholders back\r\n formatted = this.unescape(formatted);\r\n // Return result\r\n return this.cleanUp(formatted);\r\n };\r\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\r\n TextFormatter.prototype.escape = function (text) {\r\n return text.\r\n replace(/\\[\\[/g, registry.getPlaceholder(\"1\")).\r\n replace(/([^\\/]{1})\\]\\]/g, \"$1\" + registry.getPlaceholder(\"2\")).\r\n replace(/\\{\\{/g, registry.getPlaceholder(\"3\")).\r\n replace(/\\}\\}/g, registry.getPlaceholder(\"4\")).\r\n replace(/\\'\\'/g, registry.getPlaceholder(\"5\"));\r\n };\r\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\r\n TextFormatter.prototype.unescape = function (text) {\r\n return text.\r\n replace(new RegExp(registry.getPlaceholder(\"1\"), \"g\"), \"[[\").\r\n replace(new RegExp(registry.getPlaceholder(\"2\"), \"g\"), \"]]\").\r\n replace(new RegExp(registry.getPlaceholder(\"3\"), \"g\"), \"{{\").\r\n replace(new RegExp(registry.getPlaceholder(\"4\"), \"g\"), \"}}\").\r\n replace(new RegExp(registry.getPlaceholder(\"5\"), \"g\"), \"'\");\r\n };\r\n /**\r\n * Cleans up the text text for leftover double square brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Cleaned up text\r\n */\r\n TextFormatter.prototype.cleanUp = function (text) {\r\n return text.\r\n replace(/\\[\\[/g, \"[\").\r\n replace(/\\]\\]/g, \"]\").\r\n replace(/\\{\\{/g, \"{\").\r\n replace(/\\}\\}/g, \"}\").\r\n replace(/\\'\\'/g, \"'\");\r\n };\r\n /**\r\n * Wraps text into corresponding tags.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Styles\r\n * @param output Format to output in (svg, html)\r\n * @return Formatted string\r\n */\r\n TextFormatter.prototype.wrap = function (text, style, output) {\r\n if (style === \"\" || style === \"/\") {\r\n //return text;\r\n style = \"\";\r\n }\r\n switch (output) {\r\n case \"html\":\r\n return this.wrapHtml(text, this.translateStyleShortcuts(style));\r\n default:\r\n return this.wrapSvg(text, this.translateStyleShortcuts(style));\r\n }\r\n };\r\n /**\r\n * Wraps text in styled SVG tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Style property\r\n * @return Formatted tag\r\n */\r\n TextFormatter.prototype.wrapSvg = function (text, style) {\r\n if (style === \"\") {\r\n return \"\" + text + \"\";\r\n }\r\n else {\r\n return \"\" + text + \"\";\r\n }\r\n };\r\n /**\r\n * Returns an SVG `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text\r\n * @param style Style\r\n * @return Element\r\n */\r\n TextFormatter.prototype.getSvgElement = function (text, style) {\r\n var element = new AMElement(\"tspan\");\r\n element.textContent = text;\r\n if (style) {\r\n element.node.setAttribute(\"style\", style);\r\n }\r\n return element;\r\n };\r\n /**\r\n * Wraps text in HTML tag.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to wrap\r\n * @param style Style property\r\n * @return Formatted tag\r\n * @todo Translate SVG styles into HTML ones\r\n */\r\n TextFormatter.prototype.wrapHtml = function (text, style) {\r\n if (style === \"\") {\r\n return \"\" + text + \"\";\r\n }\r\n else {\r\n return \"\" + text + \"\";\r\n }\r\n };\r\n /**\r\n * Returns an HTML `` element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text/HTML\r\n * @param style Style definition\r\n * @return HTML element\r\n */\r\n TextFormatter.prototype.getHtmlElement = function (text, style) {\r\n var element = document.createElement(\"span\");\r\n element.innerHTML = text;\r\n if (style) {\r\n element.setAttribute(\"style\", style);\r\n }\r\n return element;\r\n };\r\n /**\r\n * Trabslates SVG CSS into HTML CSS.\r\n *\r\n * @ignore Exclude from docs\r\n * @param style SVG CSS\r\n * @return HTML CSS\r\n * @todo Implement actual translation\r\n */\r\n TextFormatter.prototype.styleSvgToHtml = function (style) {\r\n style = style.replace(/fill:/, \"color:\");\r\n return style;\r\n };\r\n /**\r\n * Translates style shortcuts into full styles, i.e.:\r\n * \"bold\" => \"font-weight: bold\"\r\n * \"#f00\" => \"fill: #f00\"\r\n *\r\n * @ignore Exclude from docs\r\n * @param style Untranslated style\r\n * @return Translated style\r\n * @todo Implement actual translation\r\n */\r\n TextFormatter.prototype.translateStyleShortcuts = function (style) {\r\n if (style == \"\" || style == \"[ ]\") {\r\n return \"\";\r\n }\r\n var cached = registry.getCache(\"translateStyleShortcuts_\" + style);\r\n if (cached) {\r\n return cached;\r\n }\r\n // Get style parts\r\n var b = style.match(/([\\w\\-]*:[\\s]?[^;\\s\\]]*)|(\\#[\\w]{1,6})|([\\w]+)|(\\/)/gi);\r\n // Empty?\r\n if (!b) {\r\n return style;\r\n }\r\n // Check each part\r\n for (var i = 0; i < b.length; i++) {\r\n if (b[i].match(/^bold$/i)) {\r\n // Bold\r\n b[i] = \"font-weight:\" + b[i];\r\n }\r\n else if (b[i] == \"/\") {\r\n // Just closing tag\r\n // Do nothing\r\n b[i] = \"\";\r\n }\r\n else if (!b[i].match(/:/)) {\r\n // Color\r\n b[i] = \"fill:\" + b[i];\r\n }\r\n }\r\n var res = b.join(';');\r\n registry.setCache(\"translateStyleShortcuts_\" + style, res);\r\n return res;\r\n };\r\n /**\r\n * Splits string into chunks. (style blocks, quoted blocks, regular blocks)\r\n *\r\n * If the second parameter `quotedBlocks` is set to `true` this method will\r\n * also single out text blocks enclosed within single quotes that no\r\n * formatting should be applied to, and they should be displayed as is.\r\n *\r\n * Default for the above is `false`, so that you can use single quote in text\r\n * without escaping it.\r\n *\r\n * If enabled, single quotes can be escaped by doubling it - adding two\r\n * single quotes, which will be replaced by a one single quote in the final\r\n * output.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to chunk\r\n * @param quotedBlocks Use quoted blocks\r\n * @param noFormatting Formatting blocks will be treated as regular text\r\n * @return Array of string chunks\r\n */\r\n TextFormatter.prototype.chunk = function (text, quotedBlocks, noFormatting) {\r\n if (quotedBlocks === void 0) { quotedBlocks = false; }\r\n if (noFormatting === void 0) { noFormatting = false; }\r\n // Init result\r\n var res = [];\r\n // Replace double (escaped) square spaces and quotes with temporary codes\r\n text = this.escape(text);\r\n // Deal with style blocks\r\n var chunks = quotedBlocks ? text.split(\"'\") : [text];\r\n for (var i = 0; i < chunks.length; i++) {\r\n var chunk = chunks[i];\r\n // Empty?\r\n if (chunk === \"\") {\r\n continue;\r\n }\r\n if ((i % 2) === 0) {\r\n // Text outside quotes\r\n // Parse for style blocks which are \"text\" chunks, the rest chunks are\r\n // \"value\"\r\n chunk = chunk.replace(/\\]\\[/g, \"]\" + $strings.PLACEHOLDER + \"[\");\r\n chunk = chunk.replace(/\\[\\]/g, \"[ ]\");\r\n var chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (var i2 = 0; i2 < chunks2.length; i2++) {\r\n var chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Placeholder?\r\n if (chunk2 === $strings.PLACEHOLDER) {\r\n continue;\r\n }\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or value\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"value\",\r\n \"text\": this.adapter.apply(\"chunk\", chunk2)\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": noFormatting ? \"value\" : \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n // A text within doublequotes\r\n // All chunks are \"text\"\r\n var chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (var i2 = 0; i2 < chunks2.length; i2++) {\r\n var chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or text\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"text\",\r\n \"text\": chunk2\r\n });\r\n }\r\n else if (this.isImage(chunk2)) {\r\n res.push({\r\n \"type\": \"image\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return res;\r\n };\r\n /**\r\n * Checks if supplied format contains image information and should be\r\n * formatted as such.\r\n * I.e.: `[img: myImage.png]`\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Format\r\n * @return `true` if it is an image\r\n */\r\n TextFormatter.prototype.isImage = function (text) {\r\n return text.match(/img[ ]?:/) ? true : false;\r\n };\r\n return TextFormatter;\r\n}(BaseObject));\r\nexport { TextFormatter };\r\nvar formatter;\r\n/**\r\n * Returns the global instance of [[TextFormatter]].\r\n *\r\n * All classes and instances should reuse this universal text formatter,\r\n * rather than create their own instance of it.\r\n */\r\nexport function getTextFormatter() {\r\n if (formatter == null) {\r\n formatter = new TextFormatter();\r\n }\r\n return formatter;\r\n}\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TextFormatter\"] = TextFormatter;\r\n//# sourceMappingURL=TextFormatter.js.map"],"sourceRoot":""}