{"version":3,"file":"js/chunk-vendors-0d83ce71.cfac5486.js","mappings":"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","sources":["webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Adapter.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Animation.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Array.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/AsyncPending.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Browser.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Cache.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Color.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/ColorSet.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Colors.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/DOM.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Dictionary.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Disposer.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Ease.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/EventDispatcher.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Instance.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/InterfaceColorSet.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Iterator.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Keyboard.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Language.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/List.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Log.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Math.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Morpher.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Net.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Number.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Object.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Order.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/PatternSet.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Percent.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Plugin.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/ResizeSensor.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Responsive.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/SortedList.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/String.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Strings.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Time.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Type.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Utils.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/core/utils/Validatable.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/themes/animated.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/themes/dark.js"],"sourcesContent":["/**\r\n * An Adapter can be used to apply chained synchronous transformations to any\r\n * value at runtime.\r\n *\r\n * Each type class using Adapters must have `adapters` property and adapter\r\n * interface defined.\r\n *\r\n * Adapters can be used to allow external code to apply transformations to any\r\n * value at any time.\r\n *\r\n * For example we have a Weather class which has a method `now()` which returns\r\n * current temperature.\r\n *\r\n * ```\r\n * function now() {\r\n * // ... calculate temperature\r\n * let temp = \"Temperature now is \" + degrees + \"F\";\r\n * return temp;\r\n * }\r\n * ```\r\n *\r\n * Now, supposed we want to let other classes to modify the output of the\r\n * `now()`? We just apply an adapter to the `temp` before it is returned:\r\n *\r\n * ```\r\n * temp = this.adapters.apply(\"now\", {\r\n * temp: temp,\r\n * degrees: degrees\r\n * }).temp;\r\n * ```\r\n *\r\n * Some other class might tap onto it by defining an Adapter that calculates\r\n * the temperature in Celsius:\r\n *\r\n * weather.adapters.add(\"now\", (arg) => {\r\n * arg.temp += \"(\" + farenheitToCelsius(arg.degrees) + \"C)\";\r\n * return arh;\r\n * });\r\n *\r\n * Furthermore some time-related class could add time:\r\n *\r\n * weather.adapters.add(\"now\", (arg) => {\r\n * arg.temp += \"; the time now is \" + (new Date().toLocaleString());\r\n * return arh;\r\n * });\r\n *\r\n * So without adapters we would get output like this:\r\n *\r\n * ```\r\n * Temperature now is 90F\r\n * ```\r\n *\r\n * With adapters applied we now have:\r\n *\r\n * ```\r\n * Temperature now is 90F (32C); the time now is 12/11/2012, 7:00:00 PM\r\n * ```\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SortedList } from \"./SortedList\";\r\nimport * as $number from \"./Number\";\r\nimport * as $order from \"./Order\";\r\nimport * as $iter from \"../utils/Iterator\";\r\nimport * as $array from \"../utils/Array\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $object from \"../utils/Object\";\r\n/**\r\n * ============================================================================\r\n * GLOBAL ADAPTER\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A global adapter is an adpater that is attached to a class type rather than\r\n * specific object instance.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar GlobalAdapter = /** @class */ (function () {\r\n function GlobalAdapter() {\r\n /**\r\n * Callback id iterator.\r\n */\r\n this._callbackId = 0;\r\n /**\r\n * A list of if callbacks (adapters).\r\n */\r\n this._callbacks = new SortedList(function (left, right) {\r\n return $order.or($number.order(left.priority, right.priority), $number.order(left.id, right.id));\r\n });\r\n }\r\n /**\r\n * Adds a global callback which is not specific to any particular object.\r\n * Whenever an adapter in any object of the specific class type is invoked\r\n * global adapters will kick in.\r\n *\r\n * @param type Class type\r\n * @param key Adapter key\r\n * @param callback Callback function\r\n * @param priority Priority (higher priority meaning adapter will be applied later)\r\n * @param scope Callback function scaope\r\n */\r\n GlobalAdapter.prototype.addAll = function (type, key, callback, priority, scope) {\r\n if (priority === void 0) { priority = 0; }\r\n this._callbacks.insert({\r\n id: ++this._callbackId,\r\n key: key,\r\n callback: callback,\r\n priority: priority,\r\n scope: scope,\r\n type: type\r\n });\r\n };\r\n /**\r\n * Returns if there are adapters for specific type available.\r\n *\r\n * @param type Adapter type\r\n * @param key Adapter key\r\n * @return {boolean}\r\n */\r\n GlobalAdapter.prototype.isEnabled = function (type, key) {\r\n return $array.any(this._callbacks.values, function (x) { return x.key === key && type instanceof x.type; });\r\n };\r\n /**\r\n * Applies global adapters for the object of the specific type.\r\n *\r\n * @param type Class type\r\n * @param key Adapter key\r\n * @param value Value\r\n */\r\n GlobalAdapter.prototype.applyAll = function (type, key, value) {\r\n // This is needed to improve the performance and reduce garbage collection\r\n var callbacks = this._callbacks.values;\r\n var length = callbacks.length;\r\n if (length == 0) {\r\n return value;\r\n }\r\n // Cycle through all callbacks and find the ones we need to use\r\n for (var i = 0; i < length; ++i) {\r\n var item = callbacks[i];\r\n if (item.key === key && type instanceof item.type) {\r\n value = item.callback.call(item.scope, value, type, key);\r\n }\r\n }\r\n return value;\r\n };\r\n return GlobalAdapter;\r\n}());\r\nexport { GlobalAdapter };\r\n/**\r\n * A global Adapter for plugins that want to add specific\r\n * functionality for any chart, not just specific instance.\r\n *\r\n * If you want to add an adapter which applies to all instances of the same\r\n * object type, like, for instance all slices in PieSeries, you can use\r\n * global adapter.\r\n *\r\n * Global adapter is a system-wide instance, accessible via `globalAdapter`.\r\n *\r\n * ```TypeScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries, \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries, \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n *\r\n * @ignore\r\n */\r\nexport var globalAdapter = new GlobalAdapter();\r\n/**\r\n * ============================================================================\r\n * REGULAR ADAPTER\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Adapter allows adding ordered callback functions and associating them with a\r\n * string-based key. An Adapter user can then easily invoke those callbacks to\r\n * apply custom functions on its input, output or intermediate values.\r\n *\r\n * Custom code and plugins can add their own callbacks to modify and enhance\r\n * core functionality.\r\n *\r\n * See the description of `add()` for an example.\r\n *\r\n * Almost any object in amCharts4 has own adapter, accessible with `adapter`\r\n * property.\r\n *\r\n * Any adapters added to it will be applied to that object only.\r\n *\r\n * ### Global Adapters\r\n *\r\n * If you want to add an adapter which applies to all instances of the same\r\n * object type, like, for instance all slices in PieSeries, you can use\r\n * global adapter.\r\n *\r\n * Global adapter is a system-wide instance, accessible via `globalAdapter`.\r\n *\r\n * ```TypeScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries. \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * am4core.globalAdapter.addAll(am4charts.PieSeries. \"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n *\r\n * {@link https://www.amcharts.com/docs/v4/reference/adapter_module/#globalAdapter_property More info}.\r\n *\r\n * @important\r\n */\r\nvar Adapter = /** @class */ (function () {\r\n /**\r\n * Constructor, sets the object referece this Adapter should be used for.\r\n *\r\n * @param c Object\r\n */\r\n function Adapter(c) {\r\n /**\r\n * Internal counter for callback ids.\r\n */\r\n this._callbackId = 0;\r\n /**\r\n * A list of adapter callbacks.\r\n *\r\n * @param $number.order(left.priority, right.priority) [description]\r\n * @param $number.order(left.id, right.id));\t} [description]\r\n */\r\n this._callbacks = new SortedList(function (left, right) {\r\n return $order.or($number.order(left.priority, right.priority), $number.order(left.id, right.id));\r\n });\r\n this._disabled = {};\r\n this.object = c;\r\n // TODO this exposes the internal events\r\n this.events = this._callbacks.events;\r\n }\r\n /**\r\n * Adds a callback for a specific key.\r\n *\r\n * ```TypeScript\r\n * // Override fill color value and make all slices green\r\n * chart.series.template.adapter.add(\"fill\", (value, target, key) => {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * // Override fill color value and make all slices green\r\n * chart.series.template.adapter.add(\"fill\", function(value, target, key) {\r\n * return am4core.color(\"#005500\");\r\n * });\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"adapter\": {\r\n * \t// Override fill color value and make all slices green\r\n * \t\"fill\": function(value, target, key) {\r\n * \t return am4core.color(\"#005500\");\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will call user-defined function (adapter) whenever `fill` value\r\n * is requested from the Pie series, allowing it to override the default\r\n * using custom code and any fuzzy logic.\r\n *\r\n * There can be any number of adapters set on one property key.\r\n *\r\n * In this case adapters will be applied in daisy-chain fashion. The first\r\n * adapter in queue will make its transformation. The next one will have\r\n * the output of the first adapter as a starting value, etc.\r\n *\r\n * The order of the adapters are determined either by the order they were\r\n * added in, or their `priority` value.\r\n *\r\n * The heigher the `priority`, the later in the game adapter will be applied.\r\n *\r\n * @param key Key\r\n * @param callback A callback function\r\n * @param priority The higher priority, the more chance the adapter will be applied last\r\n * @param scope Scope for the callback function\r\n */\r\n Adapter.prototype.add = function (key, callback, priority, scope) {\r\n if (priority === void 0) { priority = 0; }\r\n this._callbacks.insert({\r\n id: ++this._callbackId,\r\n key: key,\r\n callback: callback,\r\n priority: priority,\r\n scope: scope\r\n });\r\n };\r\n /**\r\n * Checks whether specific adapter is already set.\r\n *\r\n * @param key Key\r\n * @param callback A callback function\r\n * @param priority The higher priority, the more chance the adapter will be applied last\r\n * @param scope Scope for the callback function\r\n * @returns Adapter set?\r\n */\r\n Adapter.prototype.has = function (key, callback, priority, scope) {\r\n if (priority === void 0) { priority = 0; }\r\n return $iter.contains(this._callbacks.iterator(), function (item) {\r\n return item.key === key && item.callback === callback && item.priority === priority && item.scope === scope;\r\n });\r\n };\r\n /**\r\n * Removes adapter callbacks for the specific `key`.\r\n *\r\n * If `priority` is specified, only callbacks for that priority are removed.\r\n *\r\n * @param key Key\r\n * @param priority Priority\r\n * @todo Implement\r\n */\r\n Adapter.prototype.remove = function (key, priority) {\r\n var _this = this;\r\n // It has to make a copy because it removes the elements while iterating\r\n // TODO inefficient\r\n // TODO should this re-enable the key ?\r\n $array.each($iter.toArray(this._callbacks.iterator()), function (item) {\r\n // TODO test this\r\n if (item.key === key && (!$type.isNumber(priority) || priority === item.priority)) {\r\n _this._callbacks.remove(item);\r\n }\r\n });\r\n };\r\n /**\r\n * Enable applying adapters for a certain key, if it was disabled before by\r\n * `disableKey()`.\r\n *\r\n * @param key Key\r\n */\r\n Adapter.prototype.enableKey = function (key) {\r\n delete this._disabled[key];\r\n };\r\n /**\r\n * Disable applying adapters for a certain key.\r\n *\r\n * Optionally, can set how many applies to skip before automatically\r\n * re-enabling the applying.\r\n *\r\n * @param key Key\r\n * @param amount Number of applies to skip\r\n */\r\n Adapter.prototype.disableKey = function (key, amount) {\r\n if (amount === void 0) { amount = Infinity; }\r\n this._disabled[key] = amount;\r\n };\r\n Adapter.prototype._hasListenersByType = function (key) {\r\n return $array.any(this._callbacks.values, function (x) { return x.key === key; });\r\n };\r\n /**\r\n * Returns if there are any enabled adapters set for the specific `key`.\r\n *\r\n * @returns Are there any adapters for the key?\r\n */\r\n Adapter.prototype.isEnabled = function (key) {\r\n return this._disabled[key] == null && (this._hasListenersByType(key) || globalAdapter.isEnabled(this.object, key));\r\n };\r\n Adapter.prototype._shouldDispatch = function (key) {\r\n var count = this._disabled[key];\r\n if (!$type.isNumber(count)) {\r\n return true;\r\n }\r\n else {\r\n if (count <= 1) {\r\n delete this._disabled[key];\r\n }\r\n else {\r\n --this._disabled[key];\r\n }\r\n return false;\r\n }\r\n };\r\n /**\r\n * Passes the input value through all the callbacks for the defined `key`.\r\n *\r\n * @param key Key\r\n * @param value Input value\r\n * @param ...rest Rest of the parameters to be passed into callback\r\n * @return Output value\r\n */\r\n Adapter.prototype.apply = function (key, value) {\r\n if (this._shouldDispatch(key)) {\r\n // This is needed to improve the performance and reduce garbage collection\r\n var callbacks = this._callbacks.values;\r\n var length_1 = callbacks.length;\r\n if (length_1 > 0) {\r\n for (var i = 0; i < length_1; ++i) {\r\n var item = callbacks[i];\r\n if (item.key === key) {\r\n value = item.callback.call(item.scope, value, this.object, key);\r\n }\r\n }\r\n }\r\n // Apply global adapters\r\n value = globalAdapter.applyAll(this.object, key, value);\r\n return value;\r\n }\r\n else {\r\n return value;\r\n }\r\n };\r\n /**\r\n * Returns all adapter keys which are in this adapter.\r\n *\r\n * @return Adapter keys\r\n */\r\n Adapter.prototype.keys = function () {\r\n // TODO inefficient\r\n return $iter.toArray($iter.map(this._callbacks.iterator(), function (x) { return x.key; }));\r\n };\r\n /**\r\n * Copies all the adapter callbacks from `source`.\r\n *\r\n * @param source An Adapter to copy items from\r\n */\r\n Adapter.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source._callbacks.iterator(), function (x) {\r\n _this.add(x.key, x.callback, x.priority, x.scope);\r\n });\r\n $object.each(source._disabled, function (key, val) {\r\n _this._disabled[key] = val;\r\n });\r\n };\r\n /**\r\n * Clears all callbacks from this Adapter.\r\n */\r\n Adapter.prototype.clear = function () {\r\n // TODO should this also re-enable all the keys ?\r\n this._callbacks.clear();\r\n };\r\n return Adapter;\r\n}());\r\nexport { Adapter };\r\n//# sourceMappingURL=Adapter.js.map","/**\r\n * Animation module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { SVGDefaults } from \"../defs/SVGDefaults\";\r\nimport { Disposer } from \"../utils/Disposer\";\r\nimport { Color } from \"../utils/Color\";\r\nimport { Percent, percent } from \"../utils/Percent\";\r\nimport * as $async from \"../utils/AsyncPending\";\r\nimport * as $ease from \"../utils/Ease\";\r\nimport * as $colors from \"../utils/Colors\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $array from \"../utils/Array\";\r\nimport * as $type from \"../utils/Type\";\r\nimport { system } from \"../System\";\r\nimport { options } from \"../Options\";\r\n/**\r\n * Calls a `callback` function for the `duration` of milliseconds.\r\n *\r\n * @todo Needed?\r\n * @deprecated Not used anywhere\r\n * @ignore Exclude from docs\r\n * @param duration Duration (ms)\r\n * @param callback Callback function\r\n * @return Disposer\r\n */\r\nexport function animate(duration, callback) {\r\n var disposed = false;\r\n // TODO use performance.now() ?\r\n var startTime = Date.now();\r\n function loop(now) {\r\n if (!disposed) {\r\n var diff = now - startTime;\r\n if (diff >= duration) {\r\n callback(1);\r\n }\r\n else {\r\n $async.nextFrame(loop);\r\n callback(diff / duration);\r\n }\r\n }\r\n }\r\n $async.nextFrame(loop);\r\n return new Disposer(function () {\r\n disposed = true;\r\n });\r\n}\r\n/**\r\n * Returns numeric value accoring to progress between start and end values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Value according to progress\r\n */\r\nfunction getProgressNumber(progress, from, to) {\r\n return from + ((to - from) * progress);\r\n}\r\n/**\r\n * Returns [[Percent]] value accoring to progress between start and end\r\n * values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Value according to progress\r\n */\r\nfunction getProgressPercent(progress, from, to) {\r\n return new Percent(getProgressNumber(progress, from.percent, to.percent));\r\n}\r\n/**\r\n * Returns color value accoring to progress between start and end values.\r\n *\r\n * @param progress Progress (0-1)\r\n * @param from\r\n * @param to\r\n * @return Color according to progress\r\n */\r\nfunction getProgressColor(progress, from, to) {\r\n var color = new Color($colors.interpolate(from.rgb, to.rgb, progress));\r\n if (from.alpha != to.alpha) {\r\n color.alpha = from.alpha + (to.alpha - from.alpha) * progress;\r\n }\r\n return color;\r\n}\r\n/**\r\n * [getHybridProperty description]\r\n *\r\n * @todo Description\r\n * @param property [description]\r\n * @param type [description]\r\n * @return [description]\r\n */\r\nfunction getHybridProperty(property, type) {\r\n return type + property.charAt(0).toUpperCase() + property.substr(1);\r\n}\r\nvar AnimationDisposer = /** @class */ (function () {\r\n function AnimationDisposer(array) {\r\n this._disposer = new Disposer(function () {\r\n while (array.length !== 0) {\r\n array[0].dispose();\r\n }\r\n });\r\n }\r\n AnimationDisposer.prototype.isDisposed = function () {\r\n return this._disposer.isDisposed();\r\n };\r\n AnimationDisposer.prototype.dispose = function () {\r\n this._disposer.dispose();\r\n };\r\n return AnimationDisposer;\r\n}());\r\nexport { AnimationDisposer };\r\n/**\r\n * Animation can be used to transition certain properties on an object that\r\n * implements [[IAnimatable]] interface.\r\n *\r\n * @see {@link IAnimationEvents} for a list of available events\r\n */\r\nvar Animation = /** @class */ (function (_super) {\r\n __extends(Animation, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param object An object animation should run on\r\n * @param animationOptions One or several (array) of animation options\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n */\r\n function Animation(object, animationOptions, duration, easing) {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Duration of the animation in milliseconds.\r\n */\r\n _this.duration = 0;\r\n /**\r\n * Easing function to use.\r\n *\r\n * @see {@link Ease}\r\n */\r\n _this.easing = $ease.linear;\r\n /**\r\n * Contains progress of the current animation: 0 (start) to 1 (end).\r\n */\r\n _this.progress = 0;\r\n /**\r\n * Indicated how many times animation should loop.\r\n */\r\n _this._loop = 0;\r\n /**\r\n * Animation is paused.\r\n */\r\n _this._pause = false;\r\n /**\r\n * Holds reference to timeout for delayed play.\r\n */\r\n _this._delayTimeout = null;\r\n /**\r\n * Elapsed time in currently playing animation.\r\n */\r\n _this._time = 0;\r\n _this._isFinished = false;\r\n _this.className = \"Animation\";\r\n // Override duration if animations disabled system-wide\r\n if (options.animationsEnabled === false) {\r\n duration = 0;\r\n }\r\n // Set parameters\r\n _this.object = object;\r\n _this.animationOptions = $array.toArray(animationOptions);\r\n _this.duration = duration;\r\n if (easing) {\r\n _this.easing = easing;\r\n }\r\n // Run check if there are already animations playing on the same properties\r\n // and stop them - the last animation takes precedence\r\n //this.stopSameAnimations();\r\n /*if ($type.hasValue(callback)) {\r\n // TODO don't use .call\r\n this.events.on(\"animationended\", callback, object);\r\n }*/\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n // TODO verify that this is correct\r\n Animation.prototype.debug = function () { };\r\n /**\r\n * Disposes this object, clears up after itself.\r\n */\r\n Animation.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.pause();\r\n };\r\n /**\r\n * Delays animation start by X milliseconds.\r\n *\r\n * @param delay Delay (ms)\r\n * @return Animation\r\n */\r\n Animation.prototype.delay = function (delay) {\r\n var _this = this;\r\n //@todo Maybe not use `bind()`\r\n if (delay > 0) {\r\n this.pause();\r\n // This is so that it will get disposed if `this.object` is disposed\r\n // TODO hacky, figure out a better way\r\n $array.move(this.object.animations, this);\r\n var id_1 = setTimeout(function () {\r\n _this._delayTimeout = null;\r\n _this.start();\r\n }, delay);\r\n this._delayTimeout = new Disposer(function () {\r\n clearTimeout(id_1);\r\n });\r\n }\r\n return this;\r\n };\r\n Animation.prototype._start = function () {\r\n this._isFinished = false;\r\n // Clear delay timeout if there was one\r\n if (this._delayTimeout) {\r\n this.removeDispose(this._delayTimeout);\r\n this._delayTimeout = null;\r\n }\r\n // Run check if there are already animations playing on the same properties\r\n // and stop them - the last animation takes precedence\r\n this.stopSameAnimations();\r\n // Reset counters\r\n this._pause = false;\r\n // Register animation\r\n $array.move(system.animations, this);\r\n // Register this animation in object's `animations` list\r\n $array.move(this.object.animations, this);\r\n system.requestFrame();\r\n };\r\n /**\r\n * Starts animation.\r\n *\r\n * @return Animation\r\n */\r\n Animation.prototype.start = function () {\r\n this._start();\r\n this._startTime = Date.now();\r\n this._time = 0;\r\n this.staticOptions = [];\r\n // Process initial property values\r\n for (var i = this.animationOptions.length - 1; i >= 0; i--) {\r\n var options_1 = this.animationOptions[i];\r\n if (!$type.hasValue(options_1.from)) {\r\n if (options_1.childObject) {\r\n options_1.from = options_1.childObject[options_1.property];\r\n }\r\n else {\r\n options_1.from = this.object[options_1.property];\r\n if (!$type.hasValue(options_1.from)) {\r\n options_1.from = SVGDefaults[options_1.property];\r\n }\r\n }\r\n /*if (!$type.hasValue(options.from)) {\r\n throw Error(\"Could not get initial transition value.\");\r\n }*/\r\n }\r\n if (options_1.from == options_1.to) { // || options.to == (this.object)[options.property]){ this is not good, as dataItem.value is set to final at once, and we animate workingValue\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n else if (!$type.hasValue(options_1.from) || (!(options_1.from instanceof Percent) && (options_1.to instanceof Percent)) || ((options_1.from instanceof Percent) && !(options_1.to instanceof Percent))) {\r\n // Initial value is undefined, treat it as static\r\n this.staticOptions.push(options_1);\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n else {\r\n // Use different update methods for different value types\r\n if ($type.isNumber(options_1.to)) {\r\n // Numeric value\r\n options_1.updateMethod = getProgressNumber;\r\n // Check if initial value is not Percent\r\n if (options_1.from instanceof Percent) {\r\n // It is. Let's convert it to pixel value\r\n // @todo Check if we can do this in a less hacky way\r\n var convertedFrom = this.object[getHybridProperty(options_1.property, \"pixel\")];\r\n if (!isNaN(convertedFrom)) {\r\n options_1.from = convertedFrom;\r\n }\r\n else {\r\n this.staticOptions.push(options_1);\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n }\r\n else if (isNaN(options_1.from)) {\r\n // Static value\r\n this.staticOptions.push(options_1);\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n }\r\n else {\r\n // Check if maybe we have a color or percent value\r\n if (options_1.to instanceof Color) {\r\n // Yup - set resolved named color\r\n //options.from = $colors.stringToColor(options.from);\r\n if (options_1.from) {\r\n options_1.updateMethod = getProgressColor;\r\n }\r\n else {\r\n // Static value\r\n this.staticOptions.push(options_1);\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n }\r\n else if (options_1.to instanceof Percent) {\r\n // Percent\r\n options_1.updateMethod = getProgressPercent;\r\n // Check if the initial value is maybe in pixels\r\n if (!isNaN(options_1.from)) {\r\n // It is. Let's convert it\r\n // @todo Check if we can do this in a less hacky way\r\n var convertedFrom = this.object[getHybridProperty(options_1.property, \"relative\")];\r\n if (!isNaN(convertedFrom)) {\r\n options_1.from = percent(convertedFrom * 100);\r\n }\r\n }\r\n }\r\n else {\r\n // Static value\r\n this.staticOptions.push(options_1);\r\n $array.remove(this.animationOptions, options_1);\r\n }\r\n }\r\n }\r\n }\r\n // Apply static options (just in case they were reset by previous\r\n // animation loop)\r\n this.applyStaticOptions();\r\n if (this.events.isEnabled(\"animationstarted\")) {\r\n var event_1 = {\r\n type: \"animationstarted\",\r\n target: this,\r\n progress: this.progress\r\n };\r\n this.events.dispatchImmediately(\"animationstarted\", event_1);\r\n }\r\n this.update();\r\n // If duration is 0, just end animation\r\n if (this.duration === 0) {\r\n this.end();\r\n }\r\n return this;\r\n };\r\n /**\r\n * Sets loop count for the animation. If parameter is not a valid number the\r\n * animation will keep on looping indefinitely.\r\n *\r\n * @param count Number of times to loop animation\r\n * @return Animation\r\n */\r\n Animation.prototype.loop = function (count) {\r\n if (!$type.isNumber(count)) {\r\n count = Infinity;\r\n }\r\n this._loop = count;\r\n return this;\r\n };\r\n /**\r\n * Pauses animation.\r\n *\r\n * @return Animation\r\n */\r\n Animation.prototype.pause = function () {\r\n this._pause = true;\r\n if (this._delayTimeout) {\r\n this.removeDispose(this._delayTimeout);\r\n this._delayTimeout = null;\r\n }\r\n $array.remove(system.animations, this);\r\n $array.remove(this.object.animations, this);\r\n return this;\r\n };\r\n /**\r\n * Resumes paused animation.\r\n *\r\n * @return Animation\r\n */\r\n Animation.prototype.resume = function () {\r\n this._start();\r\n this._startTime = Date.now() - this._time;\r\n return this;\r\n };\r\n /**\r\n * Jumps to animation end. If animation is set to loop, this will start\r\n * another round of animation from start.\r\n *\r\n * @return Animation\r\n */\r\n Animation.prototype.end = function () {\r\n // Pause and complete the progress\r\n if (this._loop == 0) {\r\n this.pause();\r\n }\r\n this.setProgress(1);\r\n // Apply static options\r\n this.applyStaticOptions();\r\n if (this.events.isEnabled(\"animationended\")) {\r\n var event_2 = {\r\n type: \"animationended\",\r\n target: this,\r\n progress: this.progress\r\n };\r\n this.events.dispatchImmediately(\"animationended\", event_2);\r\n }\r\n // Check if we should loop\r\n if (this._loop > 0) {\r\n this._loop--;\r\n this.start();\r\n }\r\n else {\r\n this.stop();\r\n this._isFinished = true;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Stops animation immediately leaving properties in their current values.\r\n */\r\n Animation.prototype.kill = function () {\r\n this.pause();\r\n this._isFinished = true;\r\n };\r\n /**\r\n * Returns indicator if this animation is finished or not\r\n *\r\n * @return Is finished?\r\n */\r\n Animation.prototype.isFinished = function () {\r\n return this._isFinished;\r\n };\r\n /**\r\n * Applies static options that can't be animated.\r\n */\r\n Animation.prototype.applyStaticOptions = function () {\r\n var _this = this;\r\n $array.each(this.staticOptions, function (options) {\r\n if (options.childObject) {\r\n options.childObject[options.property] = _this.progress == 1 ? options.to : options.from;\r\n }\r\n else {\r\n _this.object[options.property] = _this.progress == 1 ? options.to : options.from;\r\n }\r\n });\r\n };\r\n /**\r\n * Stops animation.\r\n *\r\n * When animation is stopped, the properties of the target object will remain\r\n * where they were at the moment when `stop()` was called.\r\n *\r\n * @param skipEvent Do not trigger `animationstopped` event\r\n * @return Animation\r\n */\r\n Animation.prototype.stop = function (skipEvent) {\r\n this.pause();\r\n if (!skipEvent) {\r\n if (this.events.isEnabled(\"animationstopped\")) {\r\n var event_3 = {\r\n type: \"animationstopped\",\r\n target: this,\r\n progress: this.progress\r\n };\r\n this.events.dispatchImmediately(\"animationstopped\", event_3);\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Sets current progress and updates object's numeric and color values.\r\n *\r\n * @param progress Progress (0-1)\r\n */\r\n Animation.prototype.setProgress = function (progress) {\r\n var _this = this;\r\n this._time = this.duration * progress; // just in case we call this from outside\r\n $array.each(this.animationOptions, function (options) {\r\n if (options.updateMethod && $type.hasValue(options.from)) {\r\n var value = options.updateMethod(progress, options.from, options.to);\r\n if (options.childObject) {\r\n options.childObject[options.property] = value;\r\n }\r\n else {\r\n _this.object[options.property] = value;\r\n }\r\n }\r\n });\r\n this.progress = progress;\r\n if (this.events.isEnabled(\"animationprogress\")) {\r\n var event_4 = {\r\n type: \"animationprogress\",\r\n target: this,\r\n progress: this.progress\r\n };\r\n this.events.dispatchImmediately(\"animationprogress\", event_4);\r\n }\r\n system.requestFrame();\r\n };\r\n /**\r\n * Tracks and sets progress according to time or frames.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Animation\r\n */\r\n Animation.prototype.update = function () {\r\n if (!this._pause) {\r\n var progress = void 0;\r\n this._time = $math.fitToRange(Date.now() - this._startTime, 0, this.duration);\r\n var timeProgress = this._time / this.duration;\r\n progress = this.easing(timeProgress);\r\n if (this.duration == 0 || !$type.isNumber(progress) || timeProgress >= 1) {\r\n progress = 1;\r\n }\r\n this.setProgress(progress);\r\n if ($math.round(this._time / this.duration, 6) == 1) {\r\n this.end();\r\n }\r\n }\r\n return this;\r\n };\r\n Object.defineProperty(Animation.prototype, \"delayed\", {\r\n /**\r\n * Returns `true` if this animation is delayed.\r\n *\r\n * @readonly\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._delayTimeout ? true : false;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Checks other animations currently running on the same object and removes\r\n * overlapping options from those other animations that are contained in\r\n * this animation.\r\n *\r\n * This is needed to ensure that no two confurent animations step on each\r\n * other's toes by trying to animate the same property.\r\n */\r\n Animation.prototype.stopSameAnimations = function () {\r\n var _this = this;\r\n // stop animation of the same property\r\n // TODO make this more efficient\r\n // TODO don't copy the array\r\n $array.each($array.copy(this.object.animations), function (animation) {\r\n if (animation !== _this && !animation.delayed) {\r\n var killed_1 = [];\r\n $array.each(_this.animationOptions, function (newOptions) {\r\n $array.each(animation.animationOptions, function (oldOptions) {\r\n if (newOptions.property == oldOptions.property && newOptions.childObject == oldOptions.childObject) {\r\n killed_1.push(oldOptions);\r\n if (animation.animationOptions.length == 0) {\r\n animation.kill();\r\n }\r\n }\r\n });\r\n });\r\n $array.each(killed_1, function (oldOptions) {\r\n $array.remove(animation.animationOptions, oldOptions);\r\n });\r\n }\r\n });\r\n };\r\n /**\r\n * Adds easing functions to \"function\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as function?\r\n */\r\n Animation.prototype.asFunction = function (field) {\r\n return field == \"easing\" || _super.prototype.asIs.call(this, field);\r\n };\r\n return Animation;\r\n}(BaseObjectEvents));\r\nexport { Animation };\r\n//# sourceMappingURL=Animation.js.map","import * as $math from \"./Math\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Searches `array` for `value`.\r\n *\r\n * Returns -1 if not found.\r\n *\r\n * @param array Source array\r\n * @param value Value to search\r\n * @returns Index\r\n */\r\nexport function indexOf(array, value) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n // TODO handle NaN\r\n if (array[i] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Calls `test` for each element in `array`.\r\n *\r\n * If `test` returns `true` then it immediately returns `true`.\r\n *\r\n * If `test` returns `false` for all of the elements in `array` then it returns `false`.\r\n *\r\n * @param array Source array\r\n * @param test Function which is called on each element\r\n * @returns Whether `test` returned true or not\r\n */\r\nexport function any(array, test) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n if (test(array[i])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Calls `fn` function for every member of array and returns a new array out\r\n * of all outputs.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n * @returns New array\r\n */\r\nexport function map(array, fn) {\r\n var length = array.length;\r\n var output = new Array(length);\r\n for (var i = 0; i < length; ++i) {\r\n output[i] = fn(array[i], i);\r\n }\r\n return output;\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function each(array, fn) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array in reverse order and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachReverse(array, fn) {\r\n var i = array.length;\r\n while (i--) {\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * If `fn` call evaluates to `false`, further iteration is cancelled.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(array, fn) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n if (!fn(array[i], i)) {\r\n break;\r\n }\r\n }\r\n}\r\n/**\r\n * Shifts an item at `index` towards beginning of the array.\r\n *\r\n * @param array Source array\r\n * @param index Target element index\r\n */\r\nexport function shiftLeft(array, index) {\r\n var length = array.length;\r\n for (var i = index; i < length; ++i) {\r\n array[i - index] = array[i];\r\n }\r\n array.length = length - index;\r\n}\r\n/**\r\n * Returns the last item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function last(array) {\r\n var length = array.length;\r\n return length ? array[length - 1] : undefined;\r\n}\r\n/**\r\n * Returns the first item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function first(array) {\r\n return array[0];\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * Caps `index` to be between `0` and `array.length`\r\n *\r\n * @param array Source array\r\n * @param element Item to insert\r\n * @param array Index to insert item at\r\n */\r\nexport function insert(array, element, index) {\r\n //if (array) {\r\n index = $math.fitToRange(index, 0, array.length);\r\n array.splice(index, 0, element);\r\n //}\r\n}\r\n/**\r\n * Removes all copies of `element` from `array` (if they exist) and then\r\n * inserts `element` at `index`.\r\n *\r\n * @param array Source array\r\n * @param element Item\r\n * @param array Index to move item to\r\n */\r\nexport function setIndex(array, element, index) {\r\n remove(array, element);\r\n insert(array, element, index);\r\n}\r\n/**\r\n * Pushes all of the elements from `input` into `array`.\r\n *\r\n * @param array Output array\r\n * @param input Input array\r\n */\r\nexport function pushAll(array, input) {\r\n var length = input.length;\r\n for (var i = 0; i < length; ++i) {\r\n array.push(input[i]);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array`.\r\n *\r\n * If there are multiple copies of `element`, they are all removed.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n */\r\nexport function remove(array, element) {\r\n var found = false;\r\n var index = array.indexOf(element);\r\n if (index !== -1) {\r\n found = true;\r\n array.splice(index, 1);\r\n var length_1 = array.length;\r\n while (index < length_1) {\r\n // TODO handle NaN\r\n if (array[index] === element) {\r\n array.splice(index, 1);\r\n --length_1;\r\n }\r\n else {\r\n ++index;\r\n }\r\n }\r\n }\r\n return found;\r\n}\r\n/**\r\n * Adds an `element` to `array`.\r\n *\r\n * If array already contains and item like this, it is removed before adding\r\n * it again.\r\n *\r\n * Optionally `toIndex` can be specified to add element at specific index.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to move item to\r\n */\r\nexport function move(array, element, toIndex) {\r\n // @todo this implementation must be the same as the List.moveValue method\r\n // @todo don't do anything if the desired index is the same as the current index\r\n var index = indexOf(array, element);\r\n // @todo remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n removeIndex(array, index);\r\n }\r\n if (toIndex == null) {\r\n array.push(element);\r\n }\r\n else {\r\n insertIndex(array, toIndex, element);\r\n }\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to add item at\r\n */\r\nexport function add(array, element, index) {\r\n // Append to the end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // Add to the beginning of array if index is 0\r\n else if (index === 0) {\r\n array.unshift(element);\r\n }\r\n // Add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array` (if it exists) and then inserts `element` at\r\n * `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n * @param array Index to move item to\r\n */\r\nexport function replace(array, element, index) {\r\n // check if exists\r\n var ind = array.indexOf(element);\r\n // remove if exists\r\n if (ind !== -1) {\r\n array.splice(ind, 1);\r\n }\r\n // add to end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Wraps `input` in an array, if it isn't already an array.\r\n *\r\n * @param input Source value\r\n * @return An array\r\n */\r\nexport function toArray(input) {\r\n if (Array.isArray(input)) {\r\n return input;\r\n }\r\n else {\r\n return [input];\r\n }\r\n}\r\n/**\r\n * Returns `true` if `element` exists in `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to search for\r\n * @returns Item in array?\r\n */\r\nexport function has(array, element) {\r\n return indexOf(array, element) !== -1;\r\n}\r\n/**\r\n * Returns a shallow copy of `array`.\r\n *\r\n * @param array Source array\r\n * @returns Copy of the array\r\n */\r\nexport function copy(array) {\r\n var length = array.length;\r\n // It's faster to create the array with a pre-defined length\r\n var output = new Array(length);\r\n for (var i = 0; i < length; ++i) {\r\n // Because the array has a pre-defined length, we have to assign rather than push\r\n // This is also faster than pushing\r\n output[i] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Returns a copy of `array` which contains all the elements between `start`\r\n * and `end`. (including `start` and excluding `end`)\r\n *\r\n * If `end` is not provided, it defaults to `array.length`.\r\n *\r\n * @param array Source array\r\n * @param start Start index\r\n * @param end End index\r\n * @returns Part of the array\r\n */\r\nexport function slice(array, start, end) {\r\n if (end === void 0) { end = array.length; }\r\n var output = new Array(end - start);\r\n for (var i = start; i < end; ++i) {\r\n output[i - start] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Inserts a value into array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n * @param value Value to insert\r\n */\r\nexport function insertIndex(array, index, value) {\r\n array.splice(index, 0, value);\r\n}\r\n/**\r\n * Removes a value from array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n */\r\nexport function removeIndex(array, index) {\r\n array.splice(index, 1);\r\n}\r\n/**\r\n * Orders an array using specific `ordering` function and returns index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @param value Value to search for\r\n * @returns Result of the search\r\n */\r\nexport function getSortedIndex(array, ordering, value) {\r\n var start = 0;\r\n var end = array.length;\r\n var found = false;\r\n while (start < end) {\r\n // TODO is this faster/slower than using Math.floor ?\r\n var pivot = (start + end) >> 1;\r\n var order = ordering(value, array[pivot]);\r\n // less\r\n if (order < 0) {\r\n end = pivot;\r\n // equal\r\n }\r\n else if (order === 0) {\r\n found = true;\r\n start = pivot + 1;\r\n // more\r\n }\r\n else {\r\n start = pivot + 1;\r\n }\r\n }\r\n return {\r\n found: found,\r\n index: (found ? start - 1 : start)\r\n };\r\n}\r\n/**\r\n * Searches the array using custom function and returns index of the item if\r\n * found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns -1.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\r\nexport function findIndex(array, matches) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n if (matches(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function find(array, matches) {\r\n var index = findIndex(array, matches);\r\n if (index !== -1) {\r\n return array[index];\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function shuffle(array) {\r\n // https://stackoverflow.com/a/2450976/449477\r\n var currentIndex = array.length, temporaryValue, randomIndex;\r\n // While there remain elements to shuffle...\r\n while (0 !== currentIndex) {\r\n // Pick a remaining element...\r\n randomIndex = Math.floor(Math.random() * currentIndex);\r\n currentIndex -= 1;\r\n // And swap it with the current element.\r\n temporaryValue = array[currentIndex];\r\n array[currentIndex] = array[randomIndex];\r\n array[randomIndex] = temporaryValue;\r\n }\r\n}\r\nexport function keepIf(array, keep) {\r\n var length = array.length;\r\n var i = 0;\r\n while (i < length) {\r\n if (keep(array[i])) {\r\n ++i;\r\n }\r\n else {\r\n array.splice(i, 1);\r\n --length;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Array.js.map","/**\r\n * A collection of low-level async operation stuff.\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $array from \"./Array\";\r\nvar pendingFrame = false;\r\nvar nextQueue = [];\r\nvar readQueue = [];\r\nvar writeQueue = [];\r\nvar idleQueue = [];\r\nvar fps = 1000 / 60;\r\n/**\r\n * [raf description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport var raf = (typeof requestAnimationFrame === \"function\"\r\n ? function (fn) {\r\n requestAnimationFrame(fn);\r\n }\r\n : function (fn) {\r\n setTimeout(fn, fps);\r\n });\r\n/**\r\n * [frameLoop description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nfunction frameLoop() {\r\n var now = Date.now();\r\n var length = nextQueue.length;\r\n for (var i = 0; i < length; ++i) {\r\n nextQueue[i](now);\r\n }\r\n $array.shiftLeft(nextQueue, length);\r\n for (var i = 0; i < readQueue.length; ++i) {\r\n readQueue[i](now);\r\n }\r\n readQueue.length = 0;\r\n for (var i = 0; i < writeQueue.length; ++i) {\r\n writeQueue[i](now);\r\n }\r\n writeQueue.length = 0;\r\n if (nextQueue.length === 0 && readQueue.length === 0) {\r\n pendingFrame = false;\r\n }\r\n else {\r\n raf(frameLoop);\r\n }\r\n}\r\n/**\r\n * [pendFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nfunction pendFrame() {\r\n if (!pendingFrame) {\r\n pendingFrame = true;\r\n raf(frameLoop);\r\n }\r\n}\r\n/**\r\n * [nextFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\nexport function nextFrame(fn) {\r\n nextQueue.push(fn);\r\n pendFrame();\r\n}\r\n/**\r\n * [readFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\nexport function readFrame(fn) {\r\n readQueue.push(fn);\r\n pendFrame();\r\n}\r\n/**\r\n * [writeFrame description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\nexport function writeFrame(fn) {\r\n writeQueue.push(fn);\r\n pendFrame();\r\n}\r\n/**\r\n * [whenIdle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\nexport function whenIdle(fn) {\r\n idleQueue.push(fn);\r\n}\r\n/**\r\n * [triggerIdle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @todo Maybe don't trigger a callback which was added while in the middle of triggering?\r\n */\r\nexport function triggerIdle() {\r\n var now = Date.now();\r\n var length = idleQueue.length;\r\n for (var i = 0; i < length; ++i) {\r\n idleQueue.shift()(now);\r\n }\r\n}\r\n//# sourceMappingURL=AsyncPending.js.map","// Also detects iOS\r\nexport function isSafari() {\r\n return /apple/i.test(navigator.vendor);\r\n}\r\nexport function isInternetExplorer() {\r\n return /MSIE |Trident\\//.test(navigator.userAgent);\r\n}\r\n//# sourceMappingURL=Browser.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Dictionary } from \"./Dictionary\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents object cache.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Better storage\r\n * @todo TTL logging\r\n * @todo Garbage collector\r\n */\r\nvar Cache = /** @class */ (function () {\r\n function Cache() {\r\n /**\r\n * Storage for cache items.\r\n */\r\n this._storage = new Dictionary();\r\n /**\r\n * Default TTL in milliseconds.\r\n */\r\n this.ttl = 1000;\r\n }\r\n /**\r\n * Caches or updates cached value, resets TTL.\r\n *\r\n * If `ttl` is set to zero, item will never expire.\r\n *\r\n * @param owner An id of the object that owns this cache\r\n * @param key Index key\r\n * @param value Value\r\n * @param ttl TTL of the cache to live in milliseconds\r\n */\r\n Cache.prototype.set = function (owner, key, value, ttl) {\r\n // Create if storage does not exist for this owner\r\n var ownerStorage = this._storage.insertKeyIfEmpty(owner, function () { return new Dictionary(); });\r\n // Create cache item\r\n var item = {\r\n \"touched\": new Date().getTime(),\r\n \"ttl\": $type.isNumber(ttl) ? ttl : this.ttl,\r\n \"value\": value\r\n };\r\n // Set\r\n ownerStorage.setKey(key, item);\r\n };\r\n /**\r\n * Rerturns cached item, respecting TTL.\r\n *\r\n * @param owner An id of the object that owns this cache\r\n * @param key Index key\r\n * @param value Value to return if cache not available\r\n * @return Value, or `undefined` if not set\r\n */\r\n Cache.prototype.get = function (owner, key, value) {\r\n if (value === void 0) { value = undefined; }\r\n // \t\t || ypeof this._storage[owner][key] === \"undefined\" || this._storage[owner][key].expired === true) {\r\n if (this._storage.hasKey(owner)) {\r\n var ownerStorage = this._storage.getKey(owner);\r\n if (ownerStorage.hasKey(key)) {\r\n var cacheItem = ownerStorage.getKey(key);\r\n if (cacheItem.ttl && ((cacheItem.touched + cacheItem.ttl) < new Date().getTime())) {\r\n cacheItem.expired = true;\r\n }\r\n if (cacheItem.expired) {\r\n ownerStorage.removeKey(key);\r\n return value;\r\n }\r\n return cacheItem.value;\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n else {\r\n return value;\r\n }\r\n };\r\n /**\r\n * Clears cache for specific owner or everything.\r\n *\r\n * @param owner Owner to clear cache for\r\n */\r\n Cache.prototype.clear = function (owner) {\r\n if (owner) {\r\n this._storage.removeKey(owner);\r\n }\r\n else {\r\n this._storage.clear();\r\n }\r\n };\r\n return Cache;\r\n}());\r\nexport { Cache };\r\n/**\r\n * ============================================================================\r\n * GLOBAL INSTANCE\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A global instance of cache. Use this instance to cache any values.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var cache = new Cache();\r\n//# sourceMappingURL=Cache.js.map","/**\r\n * This module contains Color object definition\r\n */\r\nimport { registry } from \"../Registry\";\r\nimport * as $colors from \"./Colors\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Represents a color.\r\n *\r\n * `Color` accepts value only in [[iRGB]] object format. To create `Color`\r\n * object by parsing it from any supported string-based formats, use helper\r\n * [[color]] function:\r\n *\r\n * ```TypeScript\r\n * am4core.color(\"#ff0000\");\r\n * am4core.color(\"#f00\");\r\n * am4core.color(\"rgb(255, 0, 0)\");\r\n * am4core.color(\"rgba(255, 0, 0, 0.5)\");\r\n * am4core.color({ r: 255, g: 0, b: 0 });\r\n * am4core.color(\"red\");\r\n * ```\r\n * ```JavaScript\r\n * am4core.color(\"#ff0000\");\r\n * am4core.color(\"#f00\");\r\n * am4core.color(\"rgb(255, 0, 0)\");\r\n * am4core.color(\"rgba(255, 0, 0, 0.5)\");\r\n * am4core.color({ r: 255, g: 0, b: 0 });\r\n * am4core.color(\"red\");\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\r\nvar Color = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n *\r\n * @param color Source color\r\n */\r\n function Color(color) {\r\n this._value = color;\r\n }\r\n Object.defineProperty(Color.prototype, \"rgb\", {\r\n /**\r\n * Returns [[iRGB]] representation of the color.\r\n *\r\n * @return RGB object\r\n */\r\n get: function () {\r\n return this._value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"hex\", {\r\n /**\r\n * Returns color hex value string, e.g. \"#FF0000\".\r\n *\r\n * @return Hex color code\r\n */\r\n get: function () {\r\n return this._value ? $colors.rgbToHex(this._value) : \"none\";\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"rgba\", {\r\n /**\r\n * Returns an `rgba()` representation of the color, e.g.:\r\n * `rgba(255, 0, 0, 0.5)`.\r\n *\r\n * @return rgba color string\r\n */\r\n get: function () {\r\n return this._value ? $colors.rgbToRGBA(this._value) : \"none\";\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"alpha\", {\r\n /**\r\n * Returns current transparency.\r\n *\r\n * @return Alpha (0-1)\r\n */\r\n get: function () {\r\n if (this._value != null && this._value.a != null) {\r\n return this._value.a;\r\n }\r\n else {\r\n return 1;\r\n }\r\n },\r\n /**\r\n * Set alpha (transparency) of the color.\r\n *\r\n * @param value Alpha (0-1)\r\n */\r\n set: function (value) {\r\n if (this._value) {\r\n this._value.a = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"lightColor\", {\r\n /**\r\n * Returns current light color setting.\r\n *\r\n * @return Color\r\n */\r\n get: function () {\r\n if (!this._lightColor) {\r\n this._lightColor = new Color({ r: 255, g: 255, b: 255 });\r\n }\r\n return this._lightColor;\r\n },\r\n /**\r\n * Sets \"light\" color. Used when determining contrasting color.\r\n *\r\n * @param color Color\r\n */\r\n set: function (color) {\r\n this._lightColor = color;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Color.prototype, \"darkColor\", {\r\n /**\r\n * Returns current dark color setting.\r\n *\r\n * @return Color\r\n */\r\n get: function () {\r\n if (!this._darkColor) {\r\n this._darkColor = new Color({ r: 0, g: 0, b: 0 });\r\n }\r\n return this._darkColor;\r\n },\r\n /**\r\n * Sets \"dark\" color. Used when determining contrasting color.\r\n *\r\n * @param color Color\r\n */\r\n set: function (color) {\r\n this._darkColor = color;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Overrides `toString` method so that [[Color]] object can be used as\r\n * string.\r\n *\r\n * @ignore Exclude from docs\r\n * @return String represantion of color (usable in CSS)\r\n */\r\n Color.prototype.toString = function () {\r\n return this.alpha < 1 ? this.rgba : this.hex;\r\n };\r\n /**\r\n * Returns a new [[Color]] which is percent lighter (positive value),\r\n * or darker (negative value).\r\n *\r\n * Parameter is in the scale of -1 to 1.\r\n *\r\n * @param percent Increase/decrease lightness by X\r\n * @return New Color\r\n */\r\n Color.prototype.lighten = function (percent) {\r\n return new Color($colors.lighten(this.rgb, percent));\r\n };\r\n /**\r\n * Returns a new [[Color]] which is percent brighter (positive value),\r\n * or darker (negative value).\r\n *\r\n * Parameter is in the scale of -1 to 1.\r\n *\r\n * @param percent Increase/decrease brightness by X\r\n * @return New Color\r\n */\r\n Color.prototype.brighten = function (percent) {\r\n return new Color($colors.brighten(this.rgb, percent));\r\n };\r\n /**\r\n * Returns a new [[Color]] based on current color with specific saturation\r\n * applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @param saturation Saturation (0-1)\r\n * @return New (saturated) color\r\n */\r\n Color.prototype.saturate = function (saturation) {\r\n return new Color($colors.saturate(this.rgb, saturation));\r\n };\r\n Object.defineProperty(Color.prototype, \"alternative\", {\r\n /**\r\n * Returns a either light or dark color that contrasts specifically with\r\n * this color.\r\n *\r\n * Uses properties `darkColor` (default black) and `lightColor` (default\r\n * white).\r\n *\r\n * Useful when determining which color label should be on a colored\r\n * background, so that it stands out.\r\n *\r\n * @return Contrasting color\r\n */\r\n get: function () {\r\n if (this.rgb != null) {\r\n return $colors.isLight(this.rgb) ? this.darkColor : this.lightColor;\r\n }\r\n else {\r\n throw new Error(\"Color does not exist\");\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Color;\r\n}());\r\nexport { Color };\r\n/**\r\n * Resolves an input variable to a normal [[iRGB]] color and creates [[Color]]\r\n * object for it.\r\n *\r\n * @param value Input value\r\n * @param alpha Alpha (0-1)\r\n * @return Color object\r\n */\r\nexport function color(value, alpha) {\r\n if (!$type.hasValue(value)) {\r\n return new Color(undefined);\r\n }\r\n if (typeof value == \"string\") {\r\n var cacheId = \"_color_\" + value + \"_\" + (alpha || \"1\");\r\n var cached = registry.getCache(cacheId);\r\n if (cached) {\r\n return new Color({\r\n r: cached.r,\r\n g: cached.g,\r\n b: cached.b,\r\n a: cached.a\r\n });\r\n }\r\n var rgb = $colors.rgb(value, alpha);\r\n registry.setCache(cacheId, rgb);\r\n return new Color(rgb);\r\n }\r\n // Check if it's already a Color object\r\n if (value instanceof Color) {\r\n if ($type.hasValue(alpha)) {\r\n value.alpha = alpha;\r\n }\r\n return value;\r\n }\r\n // Not a string or Color instance, it's the iRGB object then\r\n return new Color(value);\r\n}\r\n/**\r\n * Checks if supplied argument is instance of [[Color]].\r\n *\r\n * @param value Input value\r\n * @return Is Color?\r\n */\r\nexport function isColor(value) {\r\n return value instanceof Color;\r\n}\r\n/**\r\n * Converts any value to [[Color]].\r\n *\r\n * @param value Input value\r\n * @return Color\r\n */\r\nexport function castColor(value) {\r\n return color(value);\r\n}\r\n/**\r\n * Converts any value into a [[Color]].\r\n *\r\n * @param value Source value\r\n * @return Color object\r\n */\r\nexport function toColor(value) {\r\n if ($type.hasValue(value) && !isColor(value)) {\r\n return castColor(value);\r\n }\r\n return value;\r\n}\r\n//# sourceMappingURL=Color.js.map","/**\r\n * This module contains ColorSet object definition\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { Color, color } from \"./Color\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $colors from \"./Colors\";\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $math from \"./Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a set of colors. Can also generate colors according to set rules.\r\n *\r\n * @important\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\r\nvar ColorSet = /** @class */ (function (_super) {\r\n __extends(ColorSet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColorSet() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Holds the list of the colors in this set. (preset or auto-generated)\r\n */\r\n _this._list = [];\r\n /**\r\n * Current step in a color generator's cycle.\r\n */\r\n _this._currentStep = 0;\r\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n */\r\n _this._startIndex = 0;\r\n /**\r\n * Current pass in the color generator's cycle. Normally a generator would\r\n * cycle through all available hue range, then repeat it, alternating other\r\n * color properties, to generate distinctive colors.\r\n */\r\n _this._currentPass = 0;\r\n /**\r\n * A base color. If there are no colors pre-set in the color list, ColorSet\r\n * will use this color as a base when generating new ones, applying\r\n * `stepOptions` and `passOptions` to this base color.\r\n */\r\n _this.baseColor = new Color({\r\n r: 103,\r\n g: 183,\r\n b: 220\r\n });\r\n /**\r\n * Modifications to apply with each new generated color.\r\n */\r\n _this.stepOptions = {};\r\n /**\r\n * Modifications to apply on top of `stepOptions` for each \"pass\" of the\r\n * color generation.\r\n *\r\n * A \"pass\" is when ColorSet generates `minColors` number of colors.\r\n */\r\n _this.passOptions = {\r\n brighten: -0.2\r\n };\r\n /**\r\n * An index increment to use when iterating through color list.\r\n *\r\n * Default is 1, which means returning each and every color.\r\n *\r\n * Setting it to a bigger number will make ColorSet `next()` iterator skip\r\n * some colors.\r\n *\r\n * E.g. setting to 2, will return every second color in the list.\r\n *\r\n * This is useful, when the color list has colors that are too close each\r\n * other for contrast.\r\n *\r\n * However, having bigger number will mean that `next()` iterator will go\r\n * through the list quicker, and the generator will kick sooner.\r\n */\r\n _this.step = 1;\r\n /**\r\n * A number of colors to generate in one \"pass\".\r\n *\r\n * This setting can be automatically overridden, if ColorSet has a list of\r\n * pre-set colors. In such case ColorSet will generate exactly the same\r\n * number of colors with each pass as there were colors in original set.\r\n */\r\n _this.minColors = 20;\r\n /**\r\n * Do not let the \"lightness\" of generated color to fall below this\r\n * threshold.\r\n */\r\n _this.minLightness = 0.2;\r\n /**\r\n * Do not let the \"lightness\" of generated color to get above this threshold.\r\n */\r\n _this.maxLightness = 0.9;\r\n /**\r\n * Randomly shuffle generated colors.\r\n */\r\n _this.shuffle = false;\r\n /**\r\n * When colors are generated, based on `stepOptions`, each generated color\r\n * gets either lighter or darker.\r\n *\r\n * If this is set to `true`, color generator will switch to opposing spectrum\r\n * when reaching `minLightness` or `maxLightness`.\r\n *\r\n * E.g. if we start off with a red color, then gradually generate lighter\r\n * colors through rose shades, then switch back to dark red and gradually\r\n * increase the lightness of it until it reaches the starting red.\r\n *\r\n * If set to `false` it will stop there and cap lightness at whatever level\r\n * we hit `minLightness` or `maxLightness`, which may result in a number of\r\n * the same colors.\r\n */\r\n _this.wrap = true;\r\n /**\r\n * Re-use same colors in the pre-set list, when ColorSet runs out of colors,\r\n * rather than start generating new ones.\r\n */\r\n _this.reuse = false;\r\n /**\r\n * Saturation of colors. This will change saturation of all colors of color\r\n * set.\r\n *\r\n * It is recommended to set this in theme, as changing it at run time won't\r\n * make the items to redraw and change color.\r\n */\r\n _this.saturation = 1;\r\n _this.className = \"ColorSet\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColorSet.prototype, \"list\", {\r\n /**\r\n * Returns current list of colors.\r\n *\r\n * If there are none, a new list of colors is generated, based on various\r\n * ColorSet settings.\r\n *\r\n * @return Color list\r\n */\r\n get: function () {\r\n if (!this._list) {\r\n this.generate(this.minColors);\r\n }\r\n return this._list;\r\n },\r\n /**\r\n * Sets a list of pre-defined colors to use for the iterator.\r\n *\r\n * @param value Color list\r\n */\r\n set: function (value) {\r\n this._list = value;\r\n this.reset();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Gets reusable color.\r\n *\r\n * @param index Index of color\r\n * @return Color\r\n */\r\n ColorSet.prototype.getReusableColor = function (index) {\r\n if (this._list.length == 0) {\r\n this.generate(1);\r\n return this.list[0];\r\n }\r\n else {\r\n var tmpstep = index - (Math.floor(index / this._list.length) * this.list.length);\r\n return this.list[tmpstep];\r\n }\r\n };\r\n /**\r\n * Returns next color in the list using internal iterator counter.\r\n *\r\n * If `step` is set to something other than 1, it may return other color than\r\n * exact next one in the list.\r\n *\r\n * @return Color\r\n */\r\n ColorSet.prototype.next = function () {\r\n var color;\r\n if (this.list.length <= this._currentStep) {\r\n if (this.reuse) {\r\n color = this.getReusableColor(this._currentStep);\r\n }\r\n else {\r\n this.generate($math.max(this.minColors, this._currentStep + 1));\r\n color = this.list[this._currentStep];\r\n }\r\n }\r\n else {\r\n color = this.list[this._currentStep];\r\n }\r\n this._currentStep += this.step;\r\n return color.saturate(this.saturation);\r\n };\r\n /**\r\n * Returns a color at specific index in the list.\r\n *\r\n * @param i Index\r\n * @return Color\r\n */\r\n ColorSet.prototype.getIndex = function (i) {\r\n var color;\r\n if (this.list.length <= i) {\r\n if (this.reuse) {\r\n color = this.getReusableColor(i);\r\n }\r\n else {\r\n this.generate(this.minColors);\r\n color = this.getIndex(i);\r\n }\r\n }\r\n else {\r\n color = this.list[i];\r\n }\r\n return color.saturate(this.saturation);\r\n };\r\n /**\r\n * Resets internal iterator.\r\n *\r\n * Calling `next()` after this will return the very first color in the color\r\n * list, even if it was already returned before.\r\n */\r\n ColorSet.prototype.reset = function () {\r\n this._currentStep = this._startIndex;\r\n };\r\n Object.defineProperty(ColorSet.prototype, \"currentStep\", {\r\n /**\r\n * @return Step\r\n */\r\n get: function () {\r\n return this._currentStep;\r\n },\r\n /**\r\n * Sets current color iteration. You can use this property to skip some\r\n * colors from iteration. E.g. setting it to `10` will skip first ten\r\n * colors.\r\n *\r\n * Please note that the number is zero-based.\r\n *\r\n * @param value Step\r\n */\r\n set: function (value) {\r\n this._currentStep = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColorSet.prototype, \"startIndex\", {\r\n /**\r\n * @return Index\r\n */\r\n get: function () {\r\n return this._startIndex;\r\n },\r\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n *\r\n * @default 0\r\n * @since 4.4.9\r\n * @param value Index\r\n */\r\n set: function (value) {\r\n this._startIndex = value;\r\n this.reset();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Generates colors based on the various ColorSet settings.\r\n *\r\n * @param count Number of colors to generate\r\n */\r\n ColorSet.prototype.generate = function (count) {\r\n // Init\r\n var curColor = this.currentColor;\r\n var hsl = $colors.rgbToHsl($type.getValue(curColor.rgb));\r\n var hueStep = $type.hasValue(this.stepOptions.hue) ? this.stepOptions.hue : 1 / count;\r\n var mods = {\r\n brighten: 0,\r\n lighten: 0,\r\n hue: hsl.h,\r\n lightness: hsl.l,\r\n saturation: hsl.s\r\n };\r\n // Generate list of hues, and shuffle them\r\n var hues = [];\r\n var startIndex = this.list.length == 0 ? 0 : 1;\r\n if (this.reuse) {\r\n for (var i = startIndex; i <= count; i++) {\r\n hues.push($colors.rgbToHsl($type.getValue(this._list[i].rgb)).h);\r\n }\r\n }\r\n else {\r\n for (var i = startIndex; i <= count; i++) {\r\n var h = hsl.h + hueStep * i;\r\n if (this.wrap && (h > 1)) {\r\n h -= 1;\r\n }\r\n hues.push(h);\r\n }\r\n }\r\n // Shuffle colors randomly\r\n if (this.shuffle) {\r\n hues.sort(function (a, b) {\r\n return Math.random() - 0.5;\r\n });\r\n }\r\n // Generate colors by rotating hue\r\n for (var i = 0; i < count; i++) {\r\n // Update hue\r\n if (this.reuse) {\r\n hsl = $colors.rgbToHsl($type.getValue(this._list[i].rgb));\r\n }\r\n else {\r\n hsl.h = hues.shift();\r\n }\r\n // Apply HSL mods\r\n this.applyStepOptions(hsl, mods, i, this._currentPass);\r\n // Convert back to Color\r\n var c = color($colors.hslToRgb(hsl));\r\n // Apply regular color mods\r\n var brighten = (this.stepOptions.brighten || 0) * i + (this.passOptions.brighten || 0) * this._currentPass;\r\n if (brighten != 0) {\r\n if (this.wrap) {\r\n brighten = $utils.fitNumberRelative(brighten, this.minLightness, this.maxLightness);\r\n }\r\n else {\r\n brighten = $utils.fitNumber(brighten, this.minLightness, this.maxLightness);\r\n }\r\n c = c.brighten(brighten);\r\n }\r\n var lighten = (this.stepOptions.lighten || 0) * i + (this.passOptions.lighten || 0) * this._currentPass;\r\n if (lighten != 0) {\r\n if (this.wrap) {\r\n lighten = $utils.fitNumberRelative(lighten, this.minLightness, this.maxLightness);\r\n }\r\n else {\r\n lighten = $utils.fitNumber(lighten, this.minLightness, this.maxLightness);\r\n }\r\n c = c.lighten(lighten);\r\n }\r\n this._list.push(c);\r\n }\r\n this._currentPass++;\r\n };\r\n Object.defineProperty(ColorSet.prototype, \"currentColor\", {\r\n /**\r\n * Returns current last color. It's either the last color in the list of\r\n * colors, or `baseColor` if list is empty.\r\n *\r\n * @return Color\r\n */\r\n get: function () {\r\n if (this._list.length == 0) {\r\n return this.baseColor.saturate(this.saturation);\r\n }\r\n else {\r\n return this._list[this._list.length - 1].saturate(this.saturation);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Generates modifiers for color, based on what step and pass.\r\n *\r\n * @param hsl Curren HSL value of the color to modify\r\n * @param base The modifiers that were before modification to use as a base\r\n * @param step Current step\r\n * @param pass Current pass\r\n */\r\n ColorSet.prototype.applyStepOptions = function (hsl, base, step, pass) {\r\n // Process lightness\r\n hsl.l = base.lightness + (this.stepOptions.lightness || 0) * step + (this.passOptions.lightness || 0) * pass;\r\n if (this.wrap) {\r\n if (hsl.l > 1) {\r\n hsl.l = hsl.l - Math.floor(hsl.l);\r\n }\r\n else if (hsl.l < 0) {\r\n hsl.l = -(hsl.l - Math.floor(hsl.l));\r\n }\r\n hsl.l = $utils.fitNumberRelative(hsl.l, this.minLightness, this.maxLightness);\r\n }\r\n else {\r\n if (hsl.l > 1) {\r\n hsl.l = 1;\r\n }\r\n else if (hsl.l < 0) {\r\n hsl.l = 0;\r\n }\r\n hsl.l = $utils.fitNumber(hsl.l, this.minLightness, this.maxLightness);\r\n }\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n ColorSet.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Cast colors\r\n if ($type.hasValue(config.list) && $type.isArray(config.list)) {\r\n for (var i = 0, len = config.list.length; i < len; i++) {\r\n if (!(config.list[i] instanceof Color)) {\r\n config.list[i] = color(config.list[i]);\r\n }\r\n }\r\n }\r\n if ($type.hasValue(config.baseColor) && !(config.baseColor instanceof Color)) {\r\n config.baseColor = color(config.baseColor);\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return ColorSet;\r\n}(BaseObject));\r\nexport { ColorSet };\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[\"ColorSet\"] = ColorSet;\r\n//# sourceMappingURL=ColorSet.js.map","/**\r\n * A collection of color-related functions\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $math from \"./Math\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Define named colors for easy resolution to RGB.\r\n */\r\nvar namedColors = {\r\n aliceblue: { r: 240, g: 248, b: 255 },\r\n antiquewhite: { r: 250, g: 235, b: 215 },\r\n aqua: { r: 0, g: 255, b: 255 },\r\n aquamarine: { r: 127, g: 255, b: 212 },\r\n azure: { r: 240, g: 255, b: 255 },\r\n beige: { r: 245, g: 245, b: 220 },\r\n bisque: { r: 255, g: 228, b: 196 },\r\n black: { r: 0, g: 0, b: 0 },\r\n blanchedalmond: { r: 255, g: 235, b: 205 },\r\n blue: { r: 0, g: 0, b: 255 },\r\n blueviolet: { r: 138, g: 43, b: 226 },\r\n brown: { r: 165, g: 42, b: 42 },\r\n burlywood: { r: 222, g: 184, b: 135 },\r\n cadetblue: { r: 95, g: 158, b: 160 },\r\n chartreuse: { r: 127, g: 255, b: 0 },\r\n chocolate: { r: 210, g: 105, b: 30 },\r\n coral: { r: 255, g: 127, b: 80 },\r\n cornflowerblue: { r: 100, g: 149, b: 237 },\r\n cornsilk: { r: 255, g: 248, b: 220 },\r\n crimson: { r: 220, g: 20, b: 60 },\r\n cyan: { r: 0, g: 255, b: 255 },\r\n darkblue: { r: 0, g: 0, b: 139 },\r\n darkcyan: { r: 0, g: 139, b: 139 },\r\n darkgoldenrod: { r: 184, g: 134, b: 11 },\r\n darkgray: { r: 169, g: 169, b: 169 },\r\n darkgrey: { r: 169, g: 169, b: 169 },\r\n darkgreen: { r: 0, g: 100, b: 0 },\r\n darkkhaki: { r: 189, g: 183, b: 107 },\r\n darkmagenta: { r: 139, g: 0, b: 139 },\r\n darkolivegreen: { r: 85, g: 107, b: 47 },\r\n darkorange: { r: 255, g: 140, b: 0 },\r\n darkorchid: { r: 153, g: 50, b: 204 },\r\n darkred: { r: 139, g: 0, b: 0 },\r\n darksalmon: { r: 233, g: 150, b: 122 },\r\n darkseagreen: { r: 143, g: 188, b: 143 },\r\n darkslateblue: { r: 72, g: 61, b: 139 },\r\n darkslategray: { r: 47, g: 79, b: 79 },\r\n darkslategrey: { r: 47, g: 79, b: 79 },\r\n darkturquoise: { r: 0, g: 206, b: 209 },\r\n darkviolet: { r: 148, g: 0, b: 211 },\r\n deeppink: { r: 255, g: 20, b: 147 },\r\n deepskyblue: { r: 0, g: 191, b: 255 },\r\n dimgray: { r: 105, g: 105, b: 105 },\r\n dimgrey: { r: 105, g: 105, b: 105 },\r\n dodgerblue: { r: 30, g: 144, b: 255 },\r\n firebrick: { r: 178, g: 34, b: 34 },\r\n floralwhite: { r: 255, g: 250, b: 240 },\r\n forestgreen: { r: 34, g: 139, b: 34 },\r\n fuchsia: { r: 255, g: 0, b: 255 },\r\n gainsboro: { r: 220, g: 220, b: 220 },\r\n ghostwhite: { r: 248, g: 248, b: 255 },\r\n gold: { r: 255, g: 215, b: 0 },\r\n goldenrod: { r: 218, g: 165, b: 32 },\r\n gray: { r: 128, g: 128, b: 128 },\r\n grey: { r: 128, g: 128, b: 128 },\r\n green: { r: 0, g: 128, b: 0 },\r\n greenyellow: { r: 173, g: 255, b: 47 },\r\n honeydew: { r: 240, g: 255, b: 240 },\r\n hotpink: { r: 255, g: 105, b: 180 },\r\n indianred: { r: 205, g: 92, b: 92 },\r\n indigo: { r: 75, g: 0, b: 130 },\r\n ivory: { r: 255, g: 255, b: 240 },\r\n khaki: { r: 240, g: 230, b: 140 },\r\n lavender: { r: 230, g: 230, b: 250 },\r\n lavenderblush: { r: 255, g: 240, b: 245 },\r\n lawngreen: { r: 124, g: 252, b: 0 },\r\n lemonchiffon: { r: 255, g: 250, b: 205 },\r\n lightblue: { r: 173, g: 216, b: 230 },\r\n lightcoral: { r: 240, g: 128, b: 128 },\r\n lightcyan: { r: 224, g: 255, b: 255 },\r\n lightgoldenrodyellow: { r: 250, g: 250, b: 210 },\r\n lightgray: { r: 211, g: 211, b: 211 },\r\n lightgrey: { r: 211, g: 211, b: 211 },\r\n lightgreen: { r: 144, g: 238, b: 144 },\r\n lightpink: { r: 255, g: 182, b: 193 },\r\n lightsalmon: { r: 255, g: 160, b: 122 },\r\n lightseagreen: { r: 32, g: 178, b: 170 },\r\n lightskyblue: { r: 135, g: 206, b: 250 },\r\n lightslategray: { r: 119, g: 136, b: 153 },\r\n lightslategrey: { r: 119, g: 136, b: 153 },\r\n lightsteelblue: { r: 176, g: 196, b: 222 },\r\n lightyellow: { r: 255, g: 255, b: 224 },\r\n lime: { r: 0, g: 255, b: 0 },\r\n limegreen: { r: 50, g: 205, b: 50 },\r\n linen: { r: 250, g: 240, b: 230 },\r\n magenta: { r: 255, g: 0, b: 255 },\r\n maroon: { r: 128, g: 0, b: 0 },\r\n mediumaquamarine: { r: 102, g: 205, b: 170 },\r\n mediumblue: { r: 0, g: 0, b: 205 },\r\n mediumorchid: { r: 186, g: 85, b: 211 },\r\n mediumpurple: { r: 147, g: 112, b: 219 },\r\n mediumseagreen: { r: 60, g: 179, b: 113 },\r\n mediumslateblue: { r: 123, g: 104, b: 238 },\r\n mediumspringgreen: { r: 0, g: 250, b: 154 },\r\n mediumturquoise: { r: 72, g: 209, b: 204 },\r\n mediumvioletred: { r: 199, g: 21, b: 133 },\r\n midnightblue: { r: 25, g: 25, b: 112 },\r\n mintcream: { r: 245, g: 255, b: 250 },\r\n mistyrose: { r: 255, g: 228, b: 225 },\r\n moccasin: { r: 255, g: 228, b: 181 },\r\n navajowhite: { r: 255, g: 222, b: 173 },\r\n navy: { r: 0, g: 0, b: 128 },\r\n oldlace: { r: 253, g: 245, b: 230 },\r\n olive: { r: 128, g: 128, b: 0 },\r\n olivedrab: { r: 107, g: 142, b: 35 },\r\n orange: { r: 255, g: 165, b: 0 },\r\n orangered: { r: 255, g: 69, b: 0 },\r\n orchid: { r: 218, g: 112, b: 214 },\r\n palegoldenrod: { r: 238, g: 232, b: 170 },\r\n palegreen: { r: 152, g: 251, b: 152 },\r\n paleturquoise: { r: 175, g: 238, b: 238 },\r\n palevioletred: { r: 219, g: 112, b: 147 },\r\n papayawhip: { r: 255, g: 239, b: 213 },\r\n peachpuff: { r: 255, g: 218, b: 185 },\r\n peru: { r: 205, g: 133, b: 63 },\r\n pink: { r: 255, g: 192, b: 203 },\r\n plum: { r: 221, g: 160, b: 221 },\r\n powderblue: { r: 176, g: 224, b: 230 },\r\n purple: { r: 128, g: 0, b: 128 },\r\n rebeccapurple: { r: 102, g: 51, b: 153 },\r\n red: { r: 255, g: 0, b: 0 },\r\n rosybrown: { r: 188, g: 143, b: 143 },\r\n royalblue: { r: 65, g: 105, b: 225 },\r\n saddlebrown: { r: 139, g: 69, b: 19 },\r\n salmon: { r: 250, g: 128, b: 114 },\r\n sandybrown: { r: 244, g: 164, b: 96 },\r\n seagreen: { r: 46, g: 139, b: 87 },\r\n seashell: { r: 255, g: 245, b: 238 },\r\n sienna: { r: 160, g: 82, b: 45 },\r\n silver: { r: 192, g: 192, b: 192 },\r\n skyblue: { r: 135, g: 206, b: 235 },\r\n slateblue: { r: 106, g: 90, b: 205 },\r\n slategray: { r: 112, g: 128, b: 144 },\r\n slategrey: { r: 112, g: 128, b: 144 },\r\n snow: { r: 255, g: 250, b: 250 },\r\n springgreen: { r: 0, g: 255, b: 127 },\r\n steelblue: { r: 70, g: 130, b: 180 },\r\n tan: { r: 210, g: 180, b: 140 },\r\n teal: { r: 0, g: 128, b: 128 },\r\n thistle: { r: 216, g: 191, b: 216 },\r\n tomato: { r: 255, g: 99, b: 71 },\r\n turquoise: { r: 64, g: 224, b: 208 },\r\n violet: { r: 238, g: 130, b: 238 },\r\n wheat: { r: 245, g: 222, b: 179 },\r\n white: { r: 255, g: 255, b: 255 },\r\n whitesmoke: { r: 245, g: 245, b: 245 },\r\n yellow: { r: 255, g: 255, b: 0 },\r\n yellowgreen: { r: 154, g: 205, b: 50 }\r\n};\r\n/**\r\n * Tries to resolve a named color into a hex color representation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Color name\r\n * @return Color\r\n * @deprecated\r\n * @hidden\r\n */\r\n/*export function resolveNamedColor(value: string): Color {\r\n return (namedColors)[value] ? (namedColors)[value] : undefined;\r\n}*/\r\n/**\r\n * Converts a proper color hex code (i.e. \"#FF5500\") or named color (i.e. \"red\")\r\n * into an {iRGB} object. If the code is not correctly formatted, an RGB of\r\n * black is returned.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Color code\r\n * @param alpha Alpha (0-1)\r\n * @return RGB\r\n */\r\nexport function rgb(color, alpha) {\r\n // Init return value\r\n var rgb;\r\n // Try resolving color format\r\n // Named color?\r\n if (namedColors[color]) {\r\n rgb = namedColors[color];\r\n }\r\n // Hex code?\r\n else if (color.charAt(0) === \"#\") {\r\n rgb = hexToRgb(color);\r\n }\r\n // rgb() format?\r\n else if (color.match(/^rgba?\\(/)) {\r\n rgb = rgbaToRgb(color);\r\n }\r\n // Was not able to resolve?\r\n if (!rgb) {\r\n rgb = { r: 0, g: 0, b: 0, a: 1 };\r\n }\r\n // Set alpha\r\n if ($type.hasValue(alpha)) {\r\n rgb.a = alpha;\r\n }\r\n return rgb;\r\n}\r\n/**\r\n * Converts a hex color code (i.e. \"#FF5500\") to an [[iRGB]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param hex Hex color code\r\n * @return RGB\r\n */\r\nexport function hexToRgb(hex) {\r\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\r\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\r\n return r + r + g + g + b + b;\r\n });\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : hexToRgbWithAlpha(hex);\r\n}\r\n/**\r\n * Converts a hex color code with alpha (i.e. \"#FF5500128\") to an [[iRGB]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param hex Hex color code\r\n * @return RGB\r\n */\r\nexport function hexToRgbWithAlpha(hex) {\r\n // Expand shorthand form (e.g. \"03FA\") to full form (e.g. \"0033FFAA\")\r\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n hex = hex.replace(shorthandRegex, function (m, r, g, b, a) {\r\n return r + r + g + g + b + b + a + a;\r\n });\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n a: parseInt(result[4], 16) / 256\r\n } : undefined;\r\n}\r\n/**\r\n * Converts color strings in format like `rgb()` and `rgba()` to [[iRGB]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Color code\r\n * @return RGB\r\n */\r\nexport function rgbaToRgb(color) {\r\n color = color.replace(/[ ]/g, \"\");\r\n // Init\r\n var matches = color.match(/^rgb\\(([0-9]*),([0-9]*),([0-9]*)\\)/i);\r\n // Try rgb() format\r\n if (matches) {\r\n matches.push(\"1\");\r\n }\r\n else {\r\n matches = color.match(/^rgba\\(([0-9]*),([0-9]*),([0-9]*),([.0-9]*)\\)/i);\r\n if (!matches) {\r\n return;\r\n }\r\n }\r\n return {\r\n r: parseInt(matches[1]),\r\n g: parseInt(matches[2]),\r\n b: parseInt(matches[3]),\r\n a: parseFloat(matches[4])\r\n };\r\n}\r\n/**\r\n * Converts an [[iRGB]] object into a hex color code.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rgb RGB\r\n * @return Hex color code\r\n */\r\nexport function rgbToHex(rgb) {\r\n return \"#\" + pad2(rgb.r.toString(16)) + pad2(rgb.g.toString(16)) + pad2(rgb.b.toString(16));\r\n}\r\n/**\r\n * Converts an [[iRGB]] object into its `rgb()` or `rgba()` representation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param rgb RGB\r\n * @return `rgba()` syntax\r\n */\r\nexport function rgbToRGBA(rgb) {\r\n if ($type.hasValue(rgb.a) && rgb.a !== 1) {\r\n return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + rgb.a + \")\";\r\n }\r\n else {\r\n return \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\r\n }\r\n}\r\n/**\r\n * Pads a 1-digit string with a zero.\r\n *\r\n * @ignore Exclude from docs\r\n * @param c Input string\r\n * @return Padded string\r\n */\r\nexport function pad2(c) {\r\n return c.length == 1 ? \"0\" + c : \"\" + c;\r\n}\r\n/**\r\n * Returns an intermediate color between two colors based on the relative\r\n * position. Position needs to be in range between 0 and 1. Zero meaning the\r\n * resulting color will be closest to the first reference color.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color1 First reference color\r\n * @param color2 Second reference color\r\n * @param percent Relative position (0-1)\r\n * @return Interpolated color\r\n */\r\nexport function interpolate(rgb1, rgb2, percent) {\r\n percent = $math.fitToRange(percent, 0, 1);\r\n if (rgb1) {\r\n if (rgb2) {\r\n return {\r\n r: rgb1.r + Math.round((rgb2.r - rgb1.r) * percent),\r\n g: rgb1.g + Math.round((rgb2.g - rgb1.g) * percent),\r\n b: rgb1.b + Math.round((rgb2.b - rgb1.b) * percent),\r\n a: (rgb1.a || 1) + Math.round(((rgb2.a || 1) - (rgb1.a || 1)) * percent)\r\n };\r\n }\r\n else {\r\n return rgb1;\r\n }\r\n }\r\n else if (rgb2) {\r\n return rgb2;\r\n }\r\n else {\r\n return rgb1;\r\n }\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the reference color.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Reference color\r\n * @param percent Brightness percent\r\n * @return Hex code of the new color\r\n */\r\nexport function lighten(rgb, percent) {\r\n if (rgb) {\r\n return {\r\n r: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\r\n g: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\r\n b: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Gets lightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getLightnessStep(value, percent) {\r\n var base = percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the source `color`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Source color\r\n * @param percent Brightness percent\r\n * @return New color\r\n */\r\nexport function brighten(rgb, percent) {\r\n if (rgb) {\r\n var base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\r\n //let base = Math.max(rgb.r, rgb.g, rgb.b);\r\n var step = getLightnessStep(base, percent);\r\n return {\r\n r: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\r\n g: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\r\n b: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Returns brightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getBrightnessStep(value, percent) {\r\n var base = 255; //percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\r\n * saturation applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Base color\r\n * @param saturation Saturation (0-1)\r\n * @return New color\r\n */\r\nexport function saturate(rgb, saturation) {\r\n if (rgb == null || saturation == 1) {\r\n return rgb;\r\n }\r\n var hsl = rgbToHsl(rgb);\r\n hsl.s = saturation;\r\n return hslToRgb(hsl);\r\n}\r\n/*\r\n// not used\r\nexport function rgbToMatrix(rgb: iRGB): string {\r\n let r = $type.toText($math.round((rgb.r || 0) / 255, 10));\r\n let g = $type.toText($math.round((rgb.g || 0) / 255, 10));\r\n let b = $type.toText($math.round((rgb.b || 0) / 255, 10));\r\n let a = $type.toText(rgb.a || 1);\r\n return\t r + \" 0 0 0 0\" +\r\n \" 0 \" + g + \" 0 0 0\" +\r\n \" 0 0 \" + b + \" 0 0\" +\r\n \" 0 0 0 \" + a + \" 0\";\r\n}\r\n*/\r\n/**\r\n * The functions below are taken and adapted from Garry Tan's blog post:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * The further attributions go mjijackson.com, which now seems to be defunct.\r\n */\r\n/**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h, s, and l are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @ignore Exclude from docs\r\n * @param h The hue\r\n * @param s The saturation\r\n * @param l The lightness\r\n * @return The RGB representation\r\n */\r\nexport function hslToRgb(color) {\r\n var r, g, b;\r\n var h = color.h;\r\n var s = color.s;\r\n var l = color.l;\r\n if (s == 0) {\r\n r = g = b = l; // achromatic\r\n }\r\n else {\r\n var hue2rgb = function hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n };\r\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n var p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n return {\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255)\r\n };\r\n}\r\n/**\r\n * Converts an RGB color value to HSL. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and l in the set [0, 1].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @ignore Exclude from docs\r\n * @param r The red color value\r\n * @param g The green color value\r\n * @param b The blue color value\r\n * @return The HSL representation\r\n */\r\nexport function rgbToHsl(color) {\r\n var r = color.r / 255;\r\n var g = color.g / 255;\r\n var b = color.b / 255;\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n var h = 0;\r\n var s = 0;\r\n var l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n var d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: h,\r\n s: s,\r\n l: l\r\n };\r\n}\r\n/**\r\n * Converts an RGB color value to HSV. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and v in the set [0, 1].\r\n *\r\n * @ignore Exclude from docs\r\n * @param Number r The red color value\r\n * @param Number g The green color value\r\n * @param Number b The blue color value\r\n * @return Array The HSV representation\r\n */\r\nexport function rgbToHsv(color) {\r\n var r = color.r / 255;\r\n var g = color.g / 255;\r\n var b = color.b / 255;\r\n var max = Math.max(r, g, b), min = Math.min(r, g, b);\r\n var h = 0;\r\n var s = 0;\r\n var v = max;\r\n var d = max - min;\r\n s = max == 0 ? 0 : d / max;\r\n if (max == min) {\r\n h = 0; // achromatic\r\n }\r\n else {\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: h,\r\n s: s,\r\n v: v\r\n };\r\n}\r\n/**\r\n * Converts an HSV color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\r\n * Assumes h, s, and v are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * @ignore Exclude from docs\r\n * @param Number h The hue\r\n * @param Number s The saturation\r\n * @param Number v The value\r\n * @return Array The RGB representation\r\n */\r\nexport function hsvToRgb(color) {\r\n var r = 0;\r\n var g = 0;\r\n var b = 0;\r\n var h = color.h;\r\n var s = color.s;\r\n var v = color.v;\r\n var i = Math.floor(h * 6);\r\n var f = h * 6 - i;\r\n var p = v * (1 - s);\r\n var q = v * (1 - f * s);\r\n var t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0:\r\n r = v;\r\n g = t;\r\n b = p;\r\n break;\r\n case 1:\r\n r = q;\r\n g = v;\r\n b = p;\r\n break;\r\n case 2:\r\n r = p;\r\n g = v;\r\n b = t;\r\n break;\r\n case 3:\r\n r = p;\r\n g = q;\r\n b = v;\r\n break;\r\n case 4:\r\n r = t;\r\n g = p;\r\n b = v;\r\n break;\r\n case 5:\r\n r = v;\r\n g = p;\r\n b = q;\r\n break;\r\n }\r\n return {\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255)\r\n };\r\n}\r\n/**\r\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\r\n * color to use for elements over this color. E.g.: you would want to use\r\n * black text over light background, and vice versa.\r\n *\r\n * @ignore Exclude from docs\r\n * @param color Source color\r\n * @return Light?\r\n */\r\nexport function isLight(color) {\r\n return ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\r\n}\r\n//# sourceMappingURL=Colors.js.map","/**\r\n * A collection of DOM-related functions.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Disposer } from \"./Disposer\";\r\nimport { readFrame, writeFrame } from \"./AsyncPending\";\r\nimport { options } from \"../Options\";\r\nimport * as $object from \"./Object\";\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * SVG namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var SVGNS = \"http://www.w3.org/2000/svg\";\r\n/**\r\n * XML namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var XMLNS = \"http://www.w3.org/2000/xmlns/\";\r\n/**\r\n * XLINK namespace.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var XLINK = \"http://www.w3.org/1999/xlink\";\r\n/**\r\n * Function that adds a disposable event listener directly to a DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dom A DOM element to add event to\r\n * @param type Event type\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\r\nexport function addEventListener(dom, type, listener, options) {\r\n //@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\r\n //console.log(type, dom);\r\n dom.addEventListener(type, listener, options || false);\r\n return new Disposer(function () {\r\n dom.removeEventListener(type, listener, options || false);\r\n });\r\n}\r\n/**\r\n * Finds and returns an element reference using following logic:\r\n * * If we pass in an element instance, we just return it back.\r\n * * If we pass in a string, the function looks for an element with such id.\r\n * * If no element with such id is found, we grab the first element with a tag name like this.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el Element definition (reference, or id, or tag name)\r\n * @return Element reference\r\n * @todo Review this function as it seems pretty fuzzy and hacky\r\n */\r\nexport function getElement(el) {\r\n if ($type.isString(el)) {\r\n var e = document.getElementById(el);\r\n if (e == null) {\r\n e = document.getElementsByClassName(el)[0];\r\n }\r\n if (e instanceof HTMLElement) {\r\n return e;\r\n }\r\n }\r\n else if (el instanceof HTMLElement) {\r\n return el;\r\n }\r\n}\r\n/**\r\n * Adds a class name to an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function addClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n var classes = className.split(\" \");\r\n $array.each(classes, function (name) {\r\n element.classList.add(name);\r\n });\r\n }\r\n else {\r\n var currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter(function (item) {\r\n return item !== className;\r\n }).join(\" \") + \" \" + className);\r\n }\r\n else {\r\n element.setAttribute(\"class\", className);\r\n }\r\n //element.className = element.className.replace(new RegExp(\"^\" + className + \"| \" + className), \"\") + \" \" + className;\r\n }\r\n}\r\n/**\r\n * Removes a class name from an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function removeClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n element.classList.remove(className);\r\n }\r\n else {\r\n var currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter(function (item) {\r\n return item !== className;\r\n }).join(\" \"));\r\n }\r\n //element.className = element.className.replace(new RegExp(\"^\" + className + \"| \" + className), \"\");\r\n }\r\n}\r\n/**\r\n * Sets style property on DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Still needed?\r\n */\r\nexport function setStyle(element, property, value) {\r\n element.style[property] = value;\r\n}\r\n/**\r\n * Gets the computed style value for an element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function getComputedStyle(element, property) {\r\n if (element.currentStyle) {\r\n return element.currentStyle[property];\r\n }\r\n return document.defaultView.getComputedStyle(element, null).getPropertyValue(property);\r\n}\r\n/**\r\n * Removes focus from any element by shifting focus to body.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function blur() {\r\n if (document.activeElement && document.activeElement != document.body) {\r\n if (document.activeElement.blur) {\r\n document.activeElement.blur();\r\n }\r\n else {\r\n var input = document.createElement(\"button\");\r\n input.style.position = \"fixed\";\r\n input.style.top = \"0px\";\r\n input.style.left = \"-10000px\";\r\n document.body.appendChild(input);\r\n input.focus();\r\n input.blur();\r\n document.body.removeChild(input);\r\n }\r\n }\r\n}\r\n/**\r\n * Tries to focus the element.\r\n *\r\n * @ignore Exlude from docs\r\n * @param element Element to focus\r\n */\r\nexport function focus(element) {\r\n if (element instanceof HTMLElement) {\r\n element.focus();\r\n }\r\n else {\r\n var input = document.createElement(\"input\");\r\n var fo = document.createElementNS(SVGNS, \"foreignObject\");\r\n fo.appendChild(input);\r\n element.appendChild(fo);\r\n input.focus();\r\n input.disabled = true;\r\n fo.remove();\r\n }\r\n /*if ((element).focus != undefined) {\r\n (element).focus();\r\n }\r\n else if (element instanceof SVGSVGElement) {\r\n // Not implemented\r\n // @todo implement focus fallback\r\n }*/\r\n}\r\n/**\r\n * Returns markup for the element including the element tag itself.\r\n * SVG elements do not support `outerHTML` so this functions applies of\r\n * a workaround which creates a new temporary wrapper, clones element and uses\r\n * wrapper's `innerHTML`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element to get full markup for\r\n * @return Markup\r\n * @deprecated Not in use anywhere\r\n */\r\nexport function outerHTML(element) {\r\n if (element.outerHTML) {\r\n return element.outerHTML;\r\n }\r\n else {\r\n var twrap = document.createElement(\"div\");\r\n var tnode = element.cloneNode(true);\r\n twrap.appendChild(tnode);\r\n var content = twrap.innerHTML;\r\n return content;\r\n }\r\n}\r\n/**\r\n * Checks if element is a valid DOM node.\r\n *\r\n * @ignore Exclude from docs\r\n * @param el Element\r\n * @return `true` if element is a valid DOM node\r\n */\r\nexport function isElement(el) {\r\n return el instanceof Object && el && el.nodeType === 1;\r\n}\r\n/**\r\n * Checks of element `a` contains element `b`.\r\n *\r\n * @param a Aleged ascendant\r\n * @param b Aleged descendant\r\n * @return Contains?\r\n */\r\nexport function contains(a, b) {\r\n var cursor = b;\r\n while (true) {\r\n if (a === cursor) {\r\n return true;\r\n }\r\n else if (cursor.parentNode == null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host == null) {\r\n return false;\r\n }\r\n else {\r\n cursor = cursor.host;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns the shadow root of the element or null\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\r\nexport function getShadowRoot(a) {\r\n var cursor = a;\r\n while (true) {\r\n if (cursor.parentNode == null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host != null) {\r\n return cursor;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns the root of the element (either the Document or the ShadowRoot)\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\r\nexport function getRoot(a) {\r\n // TODO replace with Node.prototype.getRootNode\r\n var owner = a.ownerDocument;\r\n var cursor = a;\r\n while (true) {\r\n if (cursor.parentNode == null) {\r\n // If the cursor is the document, or it is a ShadowRoot\r\n // TODO better ShadowRoot detection\r\n if (cursor === owner || cursor.host != null) {\r\n return cursor;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * Gets the true target of the Event.\r\n *\r\n * This is needed to make events work with the shadow DOM.\r\n *\r\n * @param event Event\r\n * @return EventTarget\r\n */\r\nexport function eventTarget(event) {\r\n if (typeof event.composedPath === \"function\") {\r\n return event.composedPath()[0];\r\n }\r\n else {\r\n return event.target;\r\n }\r\n}\r\n/**\r\n * Copies attributes from one element to another.\r\n *\r\n * @ignore Exclude from docs\r\n * @param source Element to copy attributes from\r\n * @param target Element to copy attributes to\r\n */\r\nexport function copyAttributes(source, target) {\r\n $array.each(source.attributes, function (attr) {\r\n // TODO what if it's null ?\r\n if (attr.value != null) {\r\n target.setAttribute(attr.name, attr.value);\r\n }\r\n });\r\n}\r\n/**\r\n * [fixPixelPerfect description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param el Element\r\n */\r\nexport function fixPixelPerfect(el) {\r\n readFrame(function () {\r\n // sometimes IE doesn't like this\r\n // TODO figure out a way to remove this\r\n try {\r\n var rect = el.getBoundingClientRect();\r\n var left_1 = rect.left - Math.round(rect.left);\r\n var top_1 = rect.top - Math.round(rect.top);\r\n if (left_1 !== 0) {\r\n writeFrame(function () {\r\n el.style.left = left_1 + \"px\";\r\n });\r\n }\r\n if (top_1 !== 0) {\r\n writeFrame(function () {\r\n el.style.top = top_1 + \"px\";\r\n });\r\n }\r\n }\r\n catch (e) { }\r\n });\r\n}\r\n/**\r\n * [rootStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nvar rootStylesheet;\r\n/**\r\n * [getStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\nfunction getStylesheet(element) {\r\n if (element == null) {\r\n if (!$type.hasValue(rootStylesheet)) {\r\n // TODO use createElementNS ?\r\n var e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (options.nonce != \"\") {\r\n e.setAttribute(\"nonce\", options.nonce);\r\n }\r\n document.head.appendChild(e);\r\n rootStylesheet = e.sheet;\r\n }\r\n return rootStylesheet;\r\n }\r\n else {\r\n // TODO use createElementNS ?\r\n var e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (options.nonce != \"\") {\r\n e.setAttribute(\"nonce\", options.nonce);\r\n }\r\n element.appendChild(e);\r\n return e.sheet;\r\n }\r\n}\r\n/**\r\n * [makeStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param selector [description]\r\n * @return [description]\r\n */\r\nfunction appendStylesheet(root, selector) {\r\n var index = root.cssRules.length;\r\n root.insertRule(selector + \"{}\", index);\r\n return root.cssRules[index];\r\n}\r\n/**\r\n * Defines a class for a CSS rule.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\r\nvar StyleRule = /** @class */ (function (_super) {\r\n __extends(StyleRule, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param selector CSS selector\r\n * @param styles An object of style attribute - value pairs\r\n */\r\n function StyleRule(element, selector, styles) {\r\n var _this = this;\r\n var root = getStylesheet(element);\r\n // TODO test this\r\n _this = _super.call(this, function () {\r\n // TODO a bit hacky\r\n var index = $array.indexOf(root.cssRules, _this._rule);\r\n if (index === -1) {\r\n throw new Error(\"Could not dispose StyleRule\");\r\n }\r\n else {\r\n // TODO if it's empty remove it from the DOM ?\r\n root.deleteRule(index);\r\n }\r\n }) || this;\r\n _this._rule = appendStylesheet(root, selector);\r\n $object.each(styles, function (key, value) {\r\n _this.setStyle(key, value);\r\n });\r\n return _this;\r\n }\r\n Object.defineProperty(StyleRule.prototype, \"selector\", {\r\n /**\r\n * @return CSS selector\r\n */\r\n get: function () {\r\n return this._rule.selectorText;\r\n },\r\n /**\r\n * A CSS selector text.\r\n *\r\n * E.g.: `.myClass p`\r\n *\r\n * @param selector CSS selector\r\n */\r\n set: function (selector) {\r\n this._rule.selectorText = selector;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets the same style properties with browser-specific prefixes.\r\n *\r\n * @param name Attribute name\r\n * @param value Attribute value\r\n */\r\n StyleRule.prototype._setVendorPrefixName = function (name, value) {\r\n var style = this._rule.style;\r\n style.setProperty(\"-webkit-\" + name, value, \"\");\r\n style.setProperty(\"-moz-\" + name, value, \"\");\r\n style.setProperty(\"-ms-\" + name, value, \"\");\r\n style.setProperty(\"-o-\" + name, value, \"\");\r\n style.setProperty(name, value, \"\");\r\n };\r\n /**\r\n * Sets a value for specific style attribute.\r\n *\r\n * @param name Attribute\r\n * @param value Value\r\n */\r\n StyleRule.prototype.setStyle = function (name, value) {\r\n if (name === \"transition\") {\r\n this._setVendorPrefixName(name, value);\r\n }\r\n else {\r\n this._rule.style.setProperty(name, value, \"\");\r\n }\r\n };\r\n return StyleRule;\r\n}(Disposer));\r\nexport { StyleRule };\r\n/**\r\n * An internal counter for unique style ids.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar styleId = 0;\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nvar StyleClass = /** @class */ (function (_super) {\r\n __extends(StyleClass, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param styles An object of style attribute - value pairs\r\n * @param name Class name\r\n */\r\n function StyleClass(element, styles, name) {\r\n var _this = this;\r\n var className = (!$type.hasValue(name)\r\n // TODO generate the classname randomly\r\n ? \"__style_\" + (++styleId) + \"__\"\r\n : name);\r\n _this = _super.call(this, element, \".\" + className, styles) || this;\r\n _this._className = className;\r\n return _this;\r\n }\r\n Object.defineProperty(StyleClass.prototype, \"className\", {\r\n /**\r\n * @return Class name\r\n */\r\n get: function () {\r\n return this._className;\r\n },\r\n /**\r\n * Class name.\r\n *\r\n * @param name Class name\r\n */\r\n set: function (name) {\r\n this._className = name;\r\n this.selector = \".\" + name;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts the whole class to\r\n * @ignore Exclude from docs\r\n */\r\n StyleClass.prototype.toString = function () {\r\n return this._className;\r\n };\r\n return StyleClass;\r\n}(StyleRule));\r\nexport { StyleClass };\r\nexport function ready(f) {\r\n if (document.readyState !== \"loading\") {\r\n f();\r\n }\r\n else {\r\n var listener_1 = function () {\r\n if (document.readyState !== \"loading\") {\r\n document.removeEventListener(\"readystatechange\", listener_1);\r\n f();\r\n }\r\n };\r\n document.addEventListener(\"readystatechange\", listener_1);\r\n }\r\n}\r\n/**\r\n * Returns a font fmaily name for the element (directly set or\r\n * computed/inherited).\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Font family\r\n */\r\nexport function findFont(element) {\r\n // Check if element has styles set\r\n var font = getComputedStyle(element, \"font-family\");\r\n if (!font) {\r\n // Completely transparent. Look for a parent\r\n var parent_1 = element.parentElement || element.parentNode;\r\n if (parent_1) {\r\n return findFont(parent_1);\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n else {\r\n return font;\r\n }\r\n}\r\n/**\r\n * Returns a font fmaily name for the element (directly set or\r\n * computed/inherited).\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Font family\r\n */\r\nexport function findFontSize(element) {\r\n // Check if element has styles set\r\n var font = getComputedStyle(element, \"font-size\");\r\n if (!font) {\r\n // Completely transparent. Look for a parent\r\n var parent_2 = element.parentElement || element.parentNode;\r\n if (parent_2) {\r\n return findFontSize(parent_2);\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n else {\r\n return font;\r\n }\r\n}\r\n/**\r\n * Checks whether element is not visible, whether directly or via its\r\n * ascendants.\r\n *\r\n * @param element Target element\r\n * @return Hidden?\r\n */\r\nexport function isHidden(element) {\r\n return (element.offsetParent === null);\r\n}\r\n/**\r\n * Checks wthether element is in the current viewport.\r\n *\r\n * @since 2.5.5\r\n * @param el Element\r\n * @return Within viewport?\r\n */\r\nexport function isElementInViewport(el, viewportTarget) {\r\n // Get position data of the element\r\n var rect = el.getBoundingClientRect();\r\n // Convert to array\r\n var targets = $type.isArray(viewportTarget) ? viewportTarget : viewportTarget ? [viewportTarget] : [];\r\n // Should we measure against specific viewport element?\r\n if (targets.length) {\r\n for (var i = 0; i < targets.length; i++) {\r\n var target = targets[i];\r\n // Check if viewport itself is visible\r\n if (!isElementInViewport(target)) {\r\n return false;\r\n }\r\n // Check if element is visible within the viewport\r\n var viewportRect = target.getBoundingClientRect();\r\n if (rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.top <= (viewportRect.top + viewportRect.height) &&\r\n rect.left <= (viewportRect.left + viewportRect.width)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n return (rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.left <= (window.innerWidth || document.documentElement.clientWidth));\r\n}\r\n//# sourceMappingURL=DOM.js.map","import { __extends, __generator, __read } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Disposer } from \"./Disposer\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $object from \"./Object\";\r\nimport * as $iter from \"./Iterator\";\r\nimport * as $string from \"./String\";\r\n/**\r\n * A disposable dictionary, which when disposed itself will call `dispose()`\r\n * method on all its items.\r\n */\r\nvar DictionaryDisposer = /** @class */ (function (_super) {\r\n __extends(DictionaryDisposer, _super);\r\n function DictionaryDisposer(dict) {\r\n var _this = this;\r\n var disposer = dict.events.on(\"removed\", function (x) {\r\n x.oldValue.dispose();\r\n }, undefined, false);\r\n _this = _super.call(this, function () {\r\n disposer.dispose();\r\n // TODO clear the dictionary ?\r\n $iter.each(dict.iterator(), function (a) {\r\n var v = a[1];\r\n v.dispose();\r\n });\r\n }) || this;\r\n return _this;\r\n }\r\n return DictionaryDisposer;\r\n}(Disposer));\r\nexport { DictionaryDisposer };\r\n/**\r\n * A Dictionary is collection where values of some type can be mapped to\r\n * string keys.\r\n *\r\n * You might call it an \"associative list\" or \"associative array\".\r\n */\r\nvar Dictionary = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n */\r\n function Dictionary() {\r\n /**\r\n * Event dispatcher.\r\n */\r\n this.events = new EventDispatcher();\r\n this._dictionary = {};\r\n }\r\n /**\r\n * Returns `true` if key exists in Dictionary.\r\n *\r\n * @param key The key to search for\r\n * @return `true` if key exists, `false` if it doesn't\r\n */\r\n Dictionary.prototype.hasKey = function (key) {\r\n return $object.hasKey(this._dictionary, key);\r\n };\r\n /**\r\n * Returns the value for a specific key.\r\n *\r\n * @param key The key to search for\r\n * @return Value for the key, or `undefined` if it doesn't exist\r\n */\r\n Dictionary.prototype.getKey = function (key) {\r\n return this._dictionary[key];\r\n };\r\n /**\r\n * Inserts value at specific key.\r\n *\r\n * Will thrown an exception if the key already exists in the dictionary.\r\n *\r\n * @param key Key\r\n * @param value Value\r\n */\r\n Dictionary.prototype.insertKey = function (key, value) {\r\n if ($object.hasKey(this._dictionary, key)) {\r\n throw new Error(\"Key \" + key + \" already exists in dictionary\");\r\n }\r\n else {\r\n this._dictionary[key] = value;\r\n if (this.events.isEnabled(\"insertKey\")) {\r\n this.events.dispatchImmediately(\"insertKey\", {\r\n type: \"insertKey\",\r\n target: this,\r\n key: key,\r\n newValue: value\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Adds or updates key/value into dictionary.\r\n *\r\n * If the key already exists, the old value will be overwritten.\r\n *\r\n * If the new value is exactly the same as the old value (using ===), it won't do anything.\r\n *\r\n * @param key Key\r\n * @param value Value\r\n */\r\n Dictionary.prototype.setKey = function (key, value) {\r\n if ($object.hasKey(this._dictionary, key)) {\r\n var oldValue = this._dictionary[key];\r\n if (oldValue !== value) {\r\n this._dictionary[key] = value;\r\n if (this.events.isEnabled(\"setKey\")) {\r\n this.events.dispatchImmediately(\"setKey\", {\r\n type: \"setKey\",\r\n target: this,\r\n key: key,\r\n oldValue: oldValue,\r\n newValue: value\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n oldValue: oldValue\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n this._dictionary[key] = value;\r\n if (this.events.isEnabled(\"insertKey\")) {\r\n this.events.dispatchImmediately(\"insertKey\", {\r\n type: \"insertKey\",\r\n target: this,\r\n key: key,\r\n newValue: value\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Updates the value at specific `key` using custom function.\r\n *\r\n * Passes in current value into the function, and uses its output as a new\r\n * value.\r\n *\r\n * If the new value is exactly the same as the old value (using ===), it won't do anything.\r\n *\r\n * @ignore Exclude from docs\r\n * @param key Key\r\n * @param fn Function to transform the value\r\n */\r\n Dictionary.prototype.updateKey = function (key, fn) {\r\n if ($object.hasKey(this._dictionary, key)) {\r\n var oldValue = this._dictionary[key];\r\n var newValue = fn(oldValue);\r\n if (oldValue !== newValue) {\r\n this._dictionary[key] = newValue;\r\n if (this.events.isEnabled(\"setKey\")) {\r\n this.events.dispatchImmediately(\"setKey\", {\r\n type: \"setKey\",\r\n target: this,\r\n key: key,\r\n oldValue: oldValue,\r\n newValue: newValue\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n oldValue: oldValue\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n throw new Error(\"Key \" + key + \" doesn't exist in dictionary\");\r\n }\r\n };\r\n /**\r\n * Removes value at specific `key` from dictionary.\r\n *\r\n * @param key Key to remove\r\n */\r\n Dictionary.prototype.removeKey = function (key) {\r\n if ($object.hasKey(this._dictionary, key)) {\r\n var oldValue = this._dictionary[key];\r\n delete this._dictionary[key];\r\n if (this.events.isEnabled(\"removeKey\")) {\r\n this.events.dispatchImmediately(\"removeKey\", {\r\n type: \"removeKey\",\r\n target: this,\r\n key: key,\r\n oldValue: oldValue\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n oldValue: oldValue\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * [insertKeyIfEmpty description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo description\r\n * @param key [description]\r\n * @param ifEmpty [description]\r\n * @return [description]\r\n */\r\n Dictionary.prototype.insertKeyIfEmpty = function (key, ifEmpty) {\r\n if (!this.hasKey(key)) {\r\n this.insertKey(key, ifEmpty());\r\n }\r\n return this.getKey(key);\r\n };\r\n /**\r\n * Removes all items from the dictionary.\r\n */\r\n Dictionary.prototype.clear = function () {\r\n var _this = this;\r\n // TODO dispatch this after clear\r\n if (this.events.isEnabled(\"removed\")) {\r\n $object.each(this._dictionary, function (key, value) {\r\n _this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: _this,\r\n oldValue: value\r\n });\r\n });\r\n }\r\n this._dictionary = {};\r\n if (this.events.isEnabled(\"cleared\")) {\r\n this.events.dispatchImmediately(\"cleared\", {\r\n type: \"cleared\",\r\n target: this\r\n });\r\n }\r\n };\r\n /**\r\n * Copies items from another Dictionary.\r\n *\r\n * @param source A Dictionary to copy items from\r\n */\r\n Dictionary.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source.iterator(), function (a) {\r\n // TODO fix this type cast\r\n _this.setKey(a[0], a[1]);\r\n });\r\n };\r\n /**\r\n * Returns an interator that can be used to iterate through all items in\r\n * the dictionary.\r\n *\r\n * @return Iterator\r\n */\r\n Dictionary.prototype.iterator = function () {\r\n // @todo fix this type after the Iterator bug is fixed\r\n // https://github.com/Microsoft/TypeScript/issues/16730\r\n return $object.entries(this._dictionary);\r\n };\r\n /**\r\n * Returns an ES6 iterator for the keys/values of the dictionary.\r\n */\r\n Dictionary.prototype[Symbol.iterator] = function () {\r\n var _a, _b, _i, key;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n _a = [];\r\n for (_b in this._dictionary)\r\n _a.push(_b);\r\n _i = 0;\r\n _c.label = 1;\r\n case 1:\r\n if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n key = _a[_i];\r\n if (!$object.hasKey(this._dictionary, key)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, [key, this._dictionary[key]]];\r\n case 2:\r\n _c.sent();\r\n _c.label = 3;\r\n case 3:\r\n _i++;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n /**\r\n * Calls `f` for each key/value in the dictionary.\r\n */\r\n Dictionary.prototype.each = function (f) {\r\n $iter.each(this.iterator(), function (_a) {\r\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\r\n return f(key, value);\r\n });\r\n };\r\n /**\r\n * Returns an iterator that can be used to iterate through all items in\r\n * the dictionary, ordered by key.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Iterator\r\n */\r\n Dictionary.prototype.sortedIterator = function () {\r\n return $iter.sort(this.iterator(), function (x, y) { return $string.order(x[0], y[0]); });\r\n };\r\n return Dictionary;\r\n}());\r\nexport { Dictionary };\r\n/**\r\n * A version of a [[Dictionary]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\r\nvar DictionaryTemplate = /** @class */ (function (_super) {\r\n __extends(DictionaryTemplate, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\r\n function DictionaryTemplate(t) {\r\n var _this = _super.call(this) || this;\r\n _this.template = t;\r\n return _this;\r\n }\r\n Object.defineProperty(DictionaryTemplate.prototype, \"template\", {\r\n /**\r\n * @return Template object\r\n */\r\n get: function () {\r\n return this._template;\r\n },\r\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\r\n set: function (v) {\r\n v.isTemplate = true;\r\n this._template = v;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all elements from other dictionary.\r\n *\r\n * @param source Source dictionary\r\n */\r\n DictionaryTemplate.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source.iterator(), function (a) {\r\n // TODO fix this type cast\r\n // TODO why does this need to clone ?\r\n _this.setKey(a[0], a[1].clone());\r\n });\r\n };\r\n /**\r\n * Instantiates a new object of the specified type, adds it to specified\r\n * `key` in the dictionary, and returns it.\r\n *\r\n * @param make Item type to use. Will use the default type for the dictionary if not specified.\r\n * @return Newly created item\r\n */\r\n DictionaryTemplate.prototype.create = function (key) {\r\n var _this = this;\r\n return this.insertKeyIfEmpty(key, function () { return _this.template.clone(); });\r\n };\r\n return DictionaryTemplate;\r\n}(Dictionary));\r\nexport { DictionaryTemplate };\r\n//# sourceMappingURL=Dictionary.js.map","import { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * A base class for disposable objects.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar Disposer = /** @class */ (function () {\r\n /**\r\n * Constructor.\r\n *\r\n * @param dispose Function that disposes object\r\n */\r\n function Disposer(dispose) {\r\n this._disposed = false;\r\n this._dispose = dispose;\r\n }\r\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n Disposer.prototype.isDisposed = function () {\r\n return this._disposed;\r\n };\r\n /**\r\n * Disposes the object.\r\n */\r\n Disposer.prototype.dispose = function () {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n };\r\n return Disposer;\r\n}());\r\nexport { Disposer };\r\n/**\r\n * A collection of related disposers that can be disposed in one go.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar MultiDisposer = /** @class */ (function (_super) {\r\n __extends(MultiDisposer, _super);\r\n function MultiDisposer(disposers) {\r\n return _super.call(this, function () {\r\n $array.each(disposers, function (x) {\r\n x.dispose();\r\n });\r\n }) || this;\r\n }\r\n return MultiDisposer;\r\n}(Disposer));\r\nexport { MultiDisposer };\r\n/**\r\n * A special kind of Disposer that has attached value set.\r\n *\r\n * If a new value is set using `set()` method, the old disposer value is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nvar MutableValueDisposer = /** @class */ (function (_super) {\r\n __extends(MutableValueDisposer, _super);\r\n /**\r\n * Constructor.\r\n */\r\n function MutableValueDisposer() {\r\n var _this = _super.call(this, function () {\r\n if ($type.hasValue(_this._disposer)) {\r\n _this._disposer.dispose();\r\n _this._disposer = undefined;\r\n }\r\n }) || this;\r\n return _this;\r\n }\r\n /**\r\n * Returns current value.\r\n *\r\n * @return Value\r\n */\r\n MutableValueDisposer.prototype.get = function () {\r\n return this._value;\r\n };\r\n /**\r\n * Sets value and disposes previous disposer if it was set.\r\n *\r\n * @param value New value\r\n * @param disposer Disposer\r\n */\r\n MutableValueDisposer.prototype.set = function (value, disposer) {\r\n if ($type.hasValue(this._disposer)) {\r\n this._disposer.dispose();\r\n }\r\n this._disposer = disposer;\r\n this._value = value;\r\n };\r\n /**\r\n * Resets the disposer value.\r\n */\r\n MutableValueDisposer.prototype.reset = function () {\r\n this.set(undefined, undefined);\r\n };\r\n return MutableValueDisposer;\r\n}(Disposer));\r\nexport { MutableValueDisposer };\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nvar CounterDisposer = /** @class */ (function (_super) {\r\n __extends(CounterDisposer, _super);\r\n function CounterDisposer() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /**\r\n * [_counter description]\r\n *\r\n * @todo Description\r\n */\r\n _this._counter = 0;\r\n return _this;\r\n }\r\n /**\r\n * [increment description]\r\n *\r\n * @todo Description\r\n */\r\n CounterDisposer.prototype.increment = function () {\r\n var _this = this;\r\n // TODO throw an error if it is disposed\r\n ++this._counter;\r\n // TODO make this more efficient\r\n return new Disposer(function () {\r\n --_this._counter;\r\n if (_this._counter === 0) {\r\n _this.dispose();\r\n }\r\n });\r\n };\r\n return CounterDisposer;\r\n}(Disposer));\r\nexport { CounterDisposer };\r\n//# sourceMappingURL=Disposer.js.map","/**\r\n * A collection of easing functions\r\n *\r\n * Parts of this collection are taken from D3.js library (https://d3js.org/)\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $math from \"../utils/Math\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * The functions below are from D3.js library (https://d3js.org/)\r\n *\r\n * ----------------------------------------------------------------------------\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from this\r\n * software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ----------------------------------------------------------------------------\r\n * @hidden\r\n */\r\n/**\r\n * ============================================================================\r\n * LINEAR FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Easing function: \"linear\".\r\n */\r\nexport function linear(t) {\r\n return +t;\r\n}\r\nregistry.registeredClasses[\"ease.linear\"] = linear;\r\n/**\r\n * Easing function: \"quadIn\".\r\n */\r\nexport function quadIn(t) {\r\n return t * t;\r\n}\r\nregistry.registeredClasses[\"ease.quadIn\"] = quadIn;\r\n/**\r\n * Easing function: \"quadOut\".\r\n */\r\nexport function quadOut(t) {\r\n return t * (2 - t);\r\n}\r\nregistry.registeredClasses[\"ease.quadOut\"] = quadOut;\r\n/**\r\n * Easing function: \"quadInOut\".\r\n */\r\nexport function quadInOut(t) {\r\n t *= 2;\r\n return (t <= 1 ? t * t : --t * (2 - t) + 1) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.quadInOut\"] = quadInOut;\r\n/**\r\n * Easing function: \"polyIn\".\r\n */\r\nexport function polyIn(t, e) {\r\n return Math.pow(t, e);\r\n}\r\nregistry.registeredClasses[\"ease.polyIn\"] = polyIn;\r\n/**\r\n * Easing function: \"polyOut\".\r\n */\r\nexport function polyOut(t, e) {\r\n return 1 - Math.pow(1 - t, e);\r\n}\r\nregistry.registeredClasses[\"ease.polyOut\"] = polyOut;\r\n/**\r\n * Easing function: \"polyInOut\".\r\n */\r\nexport function polyInOut(t, e) {\r\n t *= 2;\r\n return (t <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.polyInOut\"] = polyInOut;\r\n/**\r\n * Easing function: \"polyIn3\".\r\n */\r\nexport function polyIn3(t) {\r\n return polyIn(t, 3);\r\n}\r\nregistry.registeredClasses[\"ease.polyIn3\"] = polyIn3;\r\n/**\r\n * Easing function: \"polyOut3\".\r\n */\r\nexport function polyOut3(t) {\r\n return polyOut(t, 3);\r\n}\r\nregistry.registeredClasses[\"ease.polyOut3\"] = polyOut3;\r\n/**\r\n * Easing function: \"polyInOut3\".\r\n */\r\nexport function polyInOut3(t) {\r\n return polyInOut(t, 3);\r\n}\r\nregistry.registeredClasses[\"ease.polyInOut3\"] = polyInOut3;\r\n/**\r\n * ============================================================================\r\n * EXPONENTIAL FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Easing function: \"expIn\".\r\n */\r\nexport function expIn(t) {\r\n return Math.pow(2, 10 * t - 10);\r\n}\r\nregistry.registeredClasses[\"ease.expIn\"] = expIn;\r\n/**\r\n * Easing function: \"expOut\".\r\n */\r\nexport function expOut(t) {\r\n return 1 - Math.pow(2, -10 * t);\r\n}\r\nregistry.registeredClasses[\"ease.expOut\"] = expOut;\r\n/**\r\n * Easing function: \"expInOut\".\r\n */\r\nexport function expInOut(t) {\r\n t *= 2;\r\n return (t <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.expInOut\"] = expInOut;\r\n/**\r\n * ============================================================================\r\n * SINE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Easing function: \"sinIn\".\r\n */\r\nexport function sinIn(t) {\r\n return 1 - Math.cos(t * $math.HALFPI);\r\n}\r\nregistry.registeredClasses[\"ease.sinIn\"] = sinIn;\r\n/**\r\n * Easing function: \"sinOut\".\r\n */\r\nexport function sinOut(t) {\r\n return Math.sin(t * $math.HALFPI);\r\n}\r\nregistry.registeredClasses[\"ease.sinOut\"] = sinOut;\r\n/**\r\n * Easing function: \"sinInOut\".\r\n */\r\nexport function sinInOut(t) {\r\n return (1 - Math.cos($math.PI * t)) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.sinInOut\"] = sinInOut;\r\n/**\r\n * ============================================================================\r\n * CUBIC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Easing function: \"cubicIn\".\r\n */\r\nexport function cubicIn(t) {\r\n return t * t * t;\r\n}\r\nregistry.registeredClasses[\"ease.cubicIn\"] = cubicIn;\r\n/**\r\n * Easing function: \"cubicOut\".\r\n */\r\nexport function cubicOut(t) {\r\n return --t * t * t + 1;\r\n}\r\nregistry.registeredClasses[\"ease.cubicOut\"] = cubicOut;\r\n/**\r\n * Easing function: \"cubicInOut\".\r\n */\r\nexport function cubicInOut(t) {\r\n t *= 2;\r\n return (t <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.cubicInOut\"] = cubicInOut;\r\n/**\r\n * ============================================================================\r\n * CIRCLE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Easing function: \"circleIn\".\r\n */\r\nexport function circleIn(t) {\r\n return 1 - Math.sqrt(1 - t * t);\r\n}\r\nregistry.registeredClasses[\"ease.circleIn\"] = circleIn;\r\n/**\r\n * Easing function: \"circleOut\".\r\n */\r\nexport function circleOut(t) {\r\n return Math.sqrt(1 - --t * t);\r\n}\r\nregistry.registeredClasses[\"ease.circleOut\"] = circleOut;\r\n/**\r\n * Easing function: \"circleInOut\".\r\n */\r\nexport function circleInOut(t) {\r\n t *= 2;\r\n return (t <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.circleInOut\"] = circleInOut;\r\n/**\r\n * ============================================================================\r\n * BOUNCE FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nvar b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 / b1 / b1;\r\n/**\r\n * Easing function: \"bounceIn\".\r\n */\r\nexport function bounceIn(t) {\r\n return 1 - bounceOut(1 - t);\r\n}\r\nregistry.registeredClasses[\"ease.bounceIn\"] = bounceIn;\r\n/**\r\n * Easing function: \"bounceOut\".\r\n */\r\nexport function bounceOut(t) {\r\n t = +t;\r\n return t < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\r\n}\r\nregistry.registeredClasses[\"ease.bounceOut\"] = bounceOut;\r\n/**\r\n * Easing function: \"bounceInOut\".\r\n */\r\nexport function bounceInOut(t) {\r\n t *= 2;\r\n return (t <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.bounceInOut\"] = bounceInOut;\r\n/**\r\n * ============================================================================\r\n * ELASTIC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nvar tau = 2 * Math.PI;\r\nvar amplitude = 1;\r\nvar period = 0.3 / tau;\r\nvar s = Math.asin(1 / amplitude) * period;\r\n/**\r\n * Easing function: \"elasticIn\".\r\n *\r\n * @function elasticIn\r\n * @param a Amplitude\r\n * @param p period\r\n */\r\nexport function elasticIn(t) {\r\n return amplitude * Math.pow(2, 10 * --t) * Math.sin((s - t) / period);\r\n}\r\nregistry.registeredClasses[\"ease.elasticIn\"] = elasticIn;\r\n/**\r\n * Easing function: \"elasticOut\".\r\n *\r\n * @function elasticOut\r\n * @param a Amplitude\r\n * @param p period\r\n */\r\nexport function elasticOut(t) {\r\n return 1 - amplitude * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / period);\r\n}\r\nregistry.registeredClasses[\"ease.elasticOut\"] = elasticOut;\r\n/**\r\n * Easing function: \"elasticInOut\".\r\n *\r\n * @function elasticInOut\r\n * @param a Amplitude\r\n * @param p period\r\n */\r\nexport function elasticInOut(t) {\r\n t = t * 2 - 1;\r\n return (t < 0\r\n ? amplitude * Math.pow(2, 10 * t) * Math.sin((s - t) / period)\r\n : 2 - amplitude * Math.pow(2, -10 * t) * Math.sin((s + t) / period)) / 2;\r\n}\r\nregistry.registeredClasses[\"ease.elasticInOut\"] = elasticInOut;\r\n//# sourceMappingURL=Ease.js.map","/**\r\n * Event Dispatcher module is used for registering listeners and dispatching\r\n * events across amCharts system.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Disposer } from \"./Disposer\";\r\nimport * as $array from \"./Array\";\r\nimport * as $async from \"./AsyncPending\";\r\nimport * as $type from \"./Type\";\r\n/*export interface IEventDispatcher {\r\n isDisposed(): boolean;\r\n dispose(): void;\r\n hasListeners(): boolean;\r\n enable(): void;\r\n disable(): void;\r\n enableType(type: Key): void;\r\n disableType(type: Key, amount?: number): void;\r\n isEnabled(type: Key): boolean;\r\n has(type: Key, callback?: (this: C, event: T[Key]) => void, context?: C): boolean;\r\n dispatchImmediately(type: Key, event: T[Key]): void;\r\n dispatch(type: Key, event: T[Key]): void;\r\n onAll(callback: (this: C, type: Key, event: T[Key]) => void, context?: C): IDisposer;\r\n on(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): IDisposer;\r\n once(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): IDisposer;\r\n off(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): void;\r\n off(type: Key, callback: (this: C, event: T[Key]) => void, context?: C): void;\r\n copyFrom(source: this): void;\r\n}*/\r\n/**\r\n * Universal Event Dispatcher.\r\n *\r\n * @important\r\n */\r\nvar EventDispatcher = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n */\r\n function EventDispatcher() {\r\n this._listeners = [];\r\n this._killed = [];\r\n this._disabled = {};\r\n this._iterating = 0;\r\n this._enabled = true;\r\n this._disposed = false;\r\n }\r\n /**\r\n * Returns if this object has been already disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n EventDispatcher.prototype.isDisposed = function () {\r\n return this._disposed;\r\n };\r\n /**\r\n * Dispose (destroy) this object.\r\n */\r\n EventDispatcher.prototype.dispose = function () {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n var a = this._listeners;\r\n this._iterating = 1;\r\n this._listeners = null;\r\n this._disabled = null;\r\n try {\r\n $array.each(a, function (x) {\r\n x.disposer.dispose();\r\n });\r\n }\r\n finally {\r\n this._killed = null;\r\n this._iterating = null;\r\n }\r\n }\r\n };\r\n /**\r\n * Checks if this particular event dispatcher has any listeners set.\r\n *\r\n * @return Has listeners?\r\n */\r\n EventDispatcher.prototype.hasListeners = function () {\r\n return this._listeners.length !== 0;\r\n };\r\n /**\r\n * Checks if this particular event dispatcher has any particular listeners set.\r\n *\r\n * @return Has particular event listeners?\r\n */\r\n EventDispatcher.prototype.hasListenersByType = function (type) {\r\n return $array.any(this._listeners, function (x) { return (x.type === null || x.type === type) && !x.killed; });\r\n };\r\n /**\r\n * Enable dispatching of events if they were previously disabled by\r\n * `disable()`.\r\n */\r\n EventDispatcher.prototype.enable = function () {\r\n this._enabled = true;\r\n };\r\n /**\r\n * Disable dispatching of events until re-enabled by `enable()`.\r\n */\r\n EventDispatcher.prototype.disable = function () {\r\n this._enabled = false;\r\n };\r\n /**\r\n * Enable dispatching particular event, if it was disabled before by\r\n * `disableType()`.\r\n *\r\n * @param type Event type\r\n */\r\n EventDispatcher.prototype.enableType = function (type) {\r\n delete this._disabled[type];\r\n };\r\n /**\r\n * Disable dispatching of events for a certain event type.\r\n *\r\n * Optionally, can set how many dispatches to skip before automatically\r\n * re-enabling the dispatching.\r\n *\r\n * @param type Event type\r\n * @param amount Number of event dispatches to skip\r\n */\r\n EventDispatcher.prototype.disableType = function (type, amount) {\r\n if (amount === void 0) { amount = Infinity; }\r\n this._disabled[type] = amount;\r\n };\r\n /**\r\n * Removes listener from dispatcher.\r\n *\r\n * Will throw an exception if such listener does not exists.\r\n *\r\n * @param listener Listener to remove\r\n */\r\n EventDispatcher.prototype._removeListener = function (listener) {\r\n if (this._iterating === 0) {\r\n var index = this._listeners.indexOf(listener);\r\n if (index === -1) {\r\n throw new Error(\"Invalid state: could not remove listener\");\r\n }\r\n this._listeners.splice(index, 1);\r\n }\r\n else {\r\n this._killed.push(listener);\r\n }\r\n };\r\n /**\r\n * Removes existing listener by certain parameters.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n EventDispatcher.prototype._removeExistingListener = function (once, type, callback, context) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._eachListener(function (info) {\r\n if (info.once === once && // TODO is this correct ?\r\n info.type === type &&\r\n (callback == null || info.callback === callback) &&\r\n info.context === context) {\r\n info.disposer.dispose();\r\n }\r\n });\r\n };\r\n /**\r\n * Checks if dispatching for particular event type is enabled.\r\n *\r\n * @param type Event type\r\n * @return Enabled?\r\n */\r\n EventDispatcher.prototype.isEnabled = function (type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n // TODO is this check correct ?\r\n return this._enabled && this._listeners.length > 0 && this.hasListenersByType(type) && this._disabled[type] == null;\r\n };\r\n /**\r\n * Checks if there's already a listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @return Has listener?\r\n */\r\n EventDispatcher.prototype.has = function (type, callback, context) {\r\n var index = $array.findIndex(this._listeners, function (info) {\r\n return info.once !== true && // Ignoring \"once\" listeners\r\n info.type === type &&\r\n (callback == null || info.callback === callback) &&\r\n info.context === context;\r\n });\r\n return index !== -1;\r\n };\r\n /**\r\n * Checks whether event of the particular type should be dispatched.\r\n *\r\n * @param type Event type\r\n * @return Dispatch?\r\n */\r\n EventDispatcher.prototype._shouldDispatch = function (type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n var count = this._disabled[type];\r\n if (!$type.isNumber(count)) {\r\n return this._enabled;\r\n }\r\n else {\r\n if (count <= 1) {\r\n delete this._disabled[type];\r\n }\r\n else {\r\n --this._disabled[type];\r\n }\r\n return false;\r\n }\r\n };\r\n /**\r\n * [_eachListener description]\r\n *\r\n * All of this extra code is needed when a listener is removed while iterating\r\n *\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\n EventDispatcher.prototype._eachListener = function (fn) {\r\n var _this = this;\r\n ++this._iterating;\r\n try {\r\n $array.each(this._listeners, fn);\r\n }\r\n finally {\r\n --this._iterating;\r\n // TODO should this be inside or outside the finally ?\r\n if (this._iterating === 0 && this._killed.length !== 0) {\r\n // Remove killed listeners\r\n $array.each(this._killed, function (killed) {\r\n _this._removeListener(killed);\r\n });\r\n this._killed.length = 0;\r\n }\r\n }\r\n };\r\n /**\r\n * Dispatches an event immediately without waiting for next cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n EventDispatcher.prototype.dispatchImmediately = function (type, event) {\r\n if (this._shouldDispatch(type)) {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n // TODO if the function throws, maybe it should keep going ?\r\n this._eachListener(function (listener) {\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n listener.dispatch(type, event);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Shelves the event to be dispatched within next update cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n EventDispatcher.prototype.dispatch = function (type, event) {\r\n if (this._shouldDispatch(type)) {\r\n this._eachListener(function (listener) {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n // TODO if the function throws, maybe it should keep going ?\r\n // TODO dispatch during the update cycle, rather than using whenIdle\r\n $async.whenIdle(function () {\r\n if (!listener.killed) {\r\n listener.dispatch(type, event);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Creates, catalogs and returns an [[EventListener]].\r\n *\r\n * Event listener can be disposed.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @param dispatch\r\n * @returns An event listener\r\n */\r\n EventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {\r\n var _this = this;\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._removeExistingListener(once, type, callback, context);\r\n var info = {\r\n type: type,\r\n callback: callback,\r\n context: context,\r\n shouldClone: shouldClone,\r\n dispatch: dispatch,\r\n killed: false,\r\n once: once,\r\n disposer: new Disposer(function () {\r\n info.killed = true;\r\n _this._removeListener(info);\r\n })\r\n };\r\n this._listeners.push(info);\r\n return info;\r\n };\r\n /**\r\n * Creates an event listener to be invoked on **any** event.\r\n *\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\r\n EventDispatcher.prototype.onAll = function (callback, context, shouldClone) {\r\n if (shouldClone === void 0) { shouldClone = true; }\r\n return this._on(false, null, callback, context, shouldClone, function (type, event) { return callback.call(context, type, event); }).disposer;\r\n };\r\n /**\r\n * Creates an event listener to be invoked on a specific event type.\r\n *\r\n * ```TypeScript\r\n * series.events.on(\"hidden\", (ev) => {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * series.events.on(\"hidden\", function(ev) {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"events\": {\r\n * \t\"hidden\": function(ev) {\r\n * \t console.log(\"Series hidden: \" + ev.target.name);\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will invoke our custom event handler whenever series we put\r\n * event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\r\n EventDispatcher.prototype.on = function (type, callback, context, shouldClone) {\r\n if (shouldClone === void 0) { shouldClone = true; }\r\n return this._on(false, type, callback, context, shouldClone, function (type, event) { return callback.call(context, event); }).disposer;\r\n };\r\n /**\r\n * Creates an event listener to be invoked on a specific event type once.\r\n *\r\n * Once the event listener is invoked, it is automatically disposed.\r\n *\r\n * ```TypeScript\r\n * series.events.on(\"hidden\", (ev) => {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * series.events.on(\"hidden\", function(ev) {\r\n * console.log(\"Series hidden: \" + ev.target.name);\r\n * }, this);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"events\": {\r\n * \t\"hidden\": function(ev) {\r\n * \t console.log(\"Series hidden: \" + ev.target.name);\r\n * \t}\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will invoke our custom event handler the first time series we\r\n * put event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @todo what if `listen` is called on the same function twice ?\r\n */\r\n EventDispatcher.prototype.once = function (type, callback, context, shouldClone) {\r\n if (shouldClone === void 0) { shouldClone = true; }\r\n var x = this._on(true, type, callback, context, shouldClone, function (type, event) {\r\n x.disposer.dispose();\r\n callback.call(context, event);\r\n });\r\n // TODO maybe this should return a different Disposer ?\r\n return x.disposer;\r\n };\r\n /**\r\n * Removes the event listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n EventDispatcher.prototype.off = function (type, callback, context) {\r\n this._removeExistingListener(false, type, callback, context);\r\n };\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n */\r\n EventDispatcher.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n $array.each(source._listeners, function (x) {\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n _this.onAll(x.callback, x.context);\r\n }\r\n else if (x.once) {\r\n _this.once(x.type, x.callback, x.context);\r\n }\r\n else {\r\n _this.on(x.type, x.callback, x.context);\r\n }\r\n }\r\n });\r\n };\r\n return EventDispatcher;\r\n}());\r\nexport { EventDispatcher };\r\n/**\r\n * A version of the [[EventDispatcher]] that dispatches events for a specific\r\n * target object.\r\n *\r\n * @important\r\n */\r\nvar TargetedEventDispatcher = /** @class */ (function (_super) {\r\n __extends(TargetedEventDispatcher, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param target Event dispatcher target\r\n */\r\n function TargetedEventDispatcher(target) {\r\n var _this = _super.call(this) || this;\r\n _this.target = target;\r\n return _this;\r\n }\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n */\r\n TargetedEventDispatcher.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n $array.each(source._listeners, function (x) {\r\n // TODO very hacky\r\n if (x.context === source.target) {\r\n return;\r\n }\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n _this.onAll(x.callback, x.context);\r\n }\r\n else if (x.once) {\r\n _this.once(x.type, x.callback, x.context);\r\n }\r\n else {\r\n _this.on(x.type, x.callback, x.context);\r\n }\r\n }\r\n });\r\n };\r\n return TargetedEventDispatcher;\r\n}(EventDispatcher));\r\nexport { TargetedEventDispatcher };\r\n//# sourceMappingURL=EventDispatcher.js.map","import { __read, __spread } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { system } from \"../System\";\r\nimport { registry } from \"../Registry\";\r\nimport { Container } from \"../Container\";\r\nimport { Component } from \"../Component\";\r\nimport { Paper } from \"../rendering/Paper\";\r\nimport { SVGContainer, svgContainers } from \"../rendering/SVGContainer\";\r\nimport { FocusFilter } from \"../rendering/filters/FocusFilter\";\r\nimport { Preloader } from \"../elements/Preloader\";\r\nimport { AmChartsLogo } from \"../elements/AmChartsLogo\";\r\nimport { Tooltip } from \"../elements/Tooltip\";\r\nimport { Disposer, MultiDisposer } from \"../utils/Disposer\";\r\nimport { percent } from \"./Percent\";\r\nimport { options } from \"../Options\";\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\nimport * as $dom from \"./DOM\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $log from \"./Log\";\r\n/**\r\n * ============================================================================\r\n * INSTANTIATION FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates all HTML and SVG containers needed for the chart instance, as well\r\n * as the new [[Sprite]] (as specified in `classType` parameter).\r\n *\r\n * @param htmlElement A container to creat elements in\r\n * @param classType A class definition of the new element to create\r\n * @return Newly-created Sprite object\r\n */\r\nfunction createChild(htmlElement, classType) {\r\n var htmlContainer = $dom.getElement(htmlElement);\r\n // If there's no container available yet, we create a fake one\r\n var tmpContainer = false;\r\n if (!htmlContainer) {\r\n htmlContainer = document.createElement(\"div\");\r\n htmlContainer.style.width = \"200px\";\r\n htmlContainer.style.height = \"200px\";\r\n htmlContainer.style.top = \"0\";\r\n htmlContainer.style.left = \"0\";\r\n htmlContainer.style.visibility = \"hidden\";\r\n htmlContainer.style.position = \"absolute\";\r\n document.body.appendChild(htmlContainer);\r\n tmpContainer = true;\r\n }\r\n if (htmlContainer) {\r\n htmlContainer.innerHTML = \"\";\r\n //htmlContainer.style.overflow = \"hidden\";\r\n var svgDiv_1 = new SVGContainer(htmlContainer);\r\n var paper = new Paper(svgDiv_1.SVGContainer, \"svg-\" + (svgContainers.length - 1));\r\n // the approach with masks is chosen because overflow:visible is set on SVG element in order tooltips could go outside\r\n // svg area - this is often needed when working with small charts.\r\n // main container which holds content container and tooltips container\r\n var container_1 = new Container();\r\n container_1.htmlContainer = htmlContainer;\r\n container_1.svgContainer = svgDiv_1;\r\n container_1.width = percent(100);\r\n container_1.height = percent(100);\r\n container_1.background.fillOpacity = 0;\r\n container_1.paper = paper;\r\n paper.append(container_1.group);\r\n // Set up moving to proper element container if it's not yet ready at call time\r\n if (tmpContainer) {\r\n $dom.ready(function () {\r\n container_1.moveHtmlContainer(htmlElement);\r\n });\r\n }\r\n // this is set from parent container, but this one doesn't have, so do it manually.\r\n container_1.relativeWidth = 1;\r\n container_1.relativeHeight = 1;\r\n svgDiv_1.container = container_1;\r\n // creating classType instance\r\n var sprite_1 = container_1.createChild(classType);\r\n sprite_1.topParent = container_1;\r\n var uid = sprite_1.uid;\r\n registry.invalidSprites[uid] = [];\r\n registry.invalidDatas[uid] = [];\r\n registry.invalidPositions[uid] = [];\r\n registry.invalidLayouts[uid] = [];\r\n container_1.baseId = uid;\r\n sprite_1.isBaseSprite = true;\r\n sprite_1.focusFilter = new FocusFilter();\r\n registry.baseSprites.push(sprite_1);\r\n registry.baseSpritesByUid[uid] = sprite_1;\r\n sprite_1.maskRectangle = { x: 0, y: 0, width: Math.max(svgDiv_1.width || 0, 0), height: Math.max(svgDiv_1.height || 0, 0) };\r\n // this solves issues with display:none, as all children are measured as 0x0\r\n container_1.events.on(\"maxsizechanged\", function (event) {\r\n if (event.previousWidth == 0 || event.previousHeight == 0) {\r\n container_1.deepInvalidate();\r\n }\r\n if (sprite_1.maskRectangle) {\r\n sprite_1.maskRectangle = { x: 0, y: 0, width: Math.max(svgDiv_1.width || 0, 0), height: Math.max(svgDiv_1.height || 0, 0) };\r\n }\r\n });\r\n var loopTimer_1 = null;\r\n // Checks to see whether the chart was properly disposed or not\r\n var loop_1 = function () {\r\n if (!sprite_1.isDisposed()) {\r\n if ($dom.getRoot(sprite_1.dom) == null) {\r\n if (options.autoDispose) {\r\n container_1.htmlContainer = undefined;\r\n svgDiv_1.htmlElement = undefined;\r\n sprite_1.dispose();\r\n }\r\n else {\r\n $log.warn(\"Chart was not disposed\", sprite_1.uid);\r\n }\r\n loopTimer_1 = null;\r\n }\r\n else {\r\n loopTimer_1 = window.setTimeout(loop_1, 1000);\r\n }\r\n }\r\n else {\r\n loopTimer_1 = null;\r\n }\r\n };\r\n loop_1();\r\n sprite_1.addDisposer(new Disposer(function () {\r\n if (loopTimer_1 !== null) {\r\n clearTimeout(loopTimer_1);\r\n }\r\n $array.remove(registry.baseSprites, sprite_1);\r\n registry.baseSpritesByUid[sprite_1.uid] = undefined;\r\n }));\r\n // TODO figure out a better way of doing this\r\n sprite_1.addDisposer(container_1);\r\n // tooltip container\r\n var tooltipContainer_1 = container_1.createChild(Container);\r\n tooltipContainer_1.topParent = container_1;\r\n tooltipContainer_1.width = percent(100);\r\n tooltipContainer_1.height = percent(100);\r\n tooltipContainer_1.isMeasured = false;\r\n container_1.tooltipContainer = tooltipContainer_1;\r\n sprite_1.tooltip = new Tooltip();\r\n sprite_1.tooltip.hide(0);\r\n sprite_1.tooltip.setBounds({ x: 0, y: 0, width: tooltipContainer_1.maxWidth, height: tooltipContainer_1.maxHeight });\r\n tooltipContainer_1.events.on(\"maxsizechanged\", function () {\r\n $type.getValue(sprite_1.tooltip).setBounds({ x: 0, y: 0, width: tooltipContainer_1.maxWidth, height: tooltipContainer_1.maxHeight });\r\n }, undefined, false);\r\n //@todo: maybe we don't need to create one by default but only on request?\r\n var preloader_1 = new Preloader();\r\n preloader_1.events.on(\"inited\", function () {\r\n preloader_1.__disabled = true;\r\n }, undefined, false);\r\n container_1.preloader = preloader_1;\r\n //if (!options.commercialLicense) {\r\n if (sprite_1 instanceof Container && !sprite_1.hasLicense()) {\r\n var logo_1 = tooltipContainer_1.createChild(AmChartsLogo);\r\n tooltipContainer_1.events.on(\"maxsizechanged\", function (ev) {\r\n if ((tooltipContainer_1.maxWidth <= 100) || (tooltipContainer_1.maxHeight <= 50)) {\r\n logo_1.hide();\r\n }\r\n else if (logo_1.isHidden || logo_1.isHiding) {\r\n logo_1.show();\r\n }\r\n }, undefined, false);\r\n sprite_1.logo = logo_1;\r\n logo_1.align = \"left\";\r\n logo_1.valign = \"bottom\";\r\n }\r\n $utils.used(sprite_1.numberFormatter); // need to create one.\r\n // Set this as an autonomouse instance\r\n // Controls like Preloader, Export will use this.\r\n container_1.isStandaloneInstance = true;\r\n if (options.onlyShowOnViewport) {\r\n if (!$dom.isElementInViewport(htmlContainer, options.viewportTarget)) {\r\n sprite_1.__disabled = true;\r\n sprite_1.tooltipContainer.__disabled = true;\r\n var disposers = [\r\n $dom.addEventListener(window, \"DOMContentLoaded\", function () { viewPortHandler(sprite_1); }),\r\n $dom.addEventListener(window, \"load\", function () { viewPortHandler(sprite_1); }),\r\n $dom.addEventListener(window, \"resize\", function () { viewPortHandler(sprite_1); }),\r\n $dom.addEventListener(window, \"scroll\", function () { viewPortHandler(sprite_1); })\r\n ];\r\n if (options.viewportTarget) {\r\n var targets = $type.isArray(options.viewportTarget) ? options.viewportTarget : options.viewportTarget ? [options.viewportTarget] : [];\r\n for (var i = 0; i < targets.length; i++) {\r\n var target = targets[i];\r\n disposers.push($dom.addEventListener(target, \"resize\", function () { viewPortHandler(sprite_1); }));\r\n disposers.push($dom.addEventListener(target, \"scroll\", function () { viewPortHandler(sprite_1); }));\r\n }\r\n }\r\n var disposer = new MultiDisposer(disposers);\r\n sprite_1.addDisposer(disposer);\r\n sprite_1.vpDisposer = disposer;\r\n }\r\n else if (options.queue) {\r\n addToQueue(sprite_1);\r\n }\r\n }\r\n else if (options.queue) {\r\n addToQueue(sprite_1);\r\n }\r\n return sprite_1;\r\n }\r\n else {\r\n system.log(\"html container not found\");\r\n throw new Error(\"html container not found\");\r\n }\r\n}\r\n/**\r\n * Disposes all of the currently active charts.\r\n */\r\nexport function disposeAllCharts() {\r\n while (registry.baseSprites.length !== 0) {\r\n registry.baseSprites.pop().dispose();\r\n }\r\n}\r\nexport function addToQueue(sprite) {\r\n if (registry.queue.indexOf(sprite) == -1) {\r\n sprite.__disabled = true;\r\n sprite.tooltipContainer.__disabled = true;\r\n sprite.events.disableType(\"appeared\");\r\n if (registry.queue.length == 0) {\r\n registry.events.once(\"exitframe\", function () {\r\n queueHandler(sprite);\r\n });\r\n system.requestFrame();\r\n }\r\n sprite.addDisposer(new Disposer(function () {\r\n removeFromQueue(sprite);\r\n }));\r\n registry.queue.push(sprite);\r\n }\r\n}\r\nexport function removeFromQueue(sprite) {\r\n var index = registry.queue.indexOf(sprite);\r\n if (index >= 0) {\r\n registry.queue.splice(registry.queue.indexOf(sprite), 1);\r\n var nextSprite = registry.queue[index];\r\n if (nextSprite) {\r\n queueHandler(nextSprite);\r\n }\r\n }\r\n}\r\n/**\r\n * Checks whether the chart was not initialized fully due to setting\r\n * of `onlyShowOnViewport`. If it hasn't and is now in the viewport\r\n * the chart will be initialized.\r\n *\r\n * @since 4.9.12\r\n * @param sprite Top-level chart object\r\n */\r\nexport function viewPortHandler(sprite) {\r\n if (sprite.__disabled && $dom.isElementInViewport(sprite.htmlContainer, options.viewportTarget)) {\r\n if (sprite.vpDisposer) {\r\n sprite.vpDisposer.dispose();\r\n }\r\n addToQueue(sprite);\r\n }\r\n}\r\nexport function queueHandler(sprite) {\r\n if (sprite && sprite.tooltipContainer) {\r\n sprite.__disabled = false;\r\n sprite.tooltipContainer.__disabled = false;\r\n sprite.events.enableType(\"appeared\");\r\n sprite.dispatch(\"removedfromqueue\");\r\n if (sprite.showOnInit) {\r\n sprite.events.on(\"appeared\", function () {\r\n removeFromQueue(sprite);\r\n });\r\n }\r\n if (sprite.vpDisposer) {\r\n sprite.vpDisposer.dispose();\r\n }\r\n if (sprite instanceof Container) {\r\n sprite.invalidateLabels();\r\n }\r\n if (sprite.tooltipContainer) {\r\n sprite.tooltipContainer.invalidateLayout();\r\n }\r\n if (sprite instanceof Component) {\r\n sprite.invalidateData();\r\n sprite.reinit();\r\n sprite.events.once(\"datavalidated\", function () {\r\n if (sprite.showOnInit) {\r\n sprite.appear();\r\n }\r\n else {\r\n removeFromQueue(sprite);\r\n }\r\n });\r\n }\r\n else {\r\n sprite.reinit();\r\n sprite.events.once(\"inited\", function () {\r\n removeFromQueue(sprite);\r\n });\r\n if (sprite.showOnInit) {\r\n sprite.appear();\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * A shortcut to creating a chart instance.\r\n *\r\n * The first argument is either a reference to or an id of a DOM element to be\r\n * used as a container for the chart.\r\n *\r\n * The second argument is the type reference of the chart type. (for plain\r\n * JavaScript users this can also be a string indicating chart type)\r\n *\r\n * ```TypeScript\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n * ```\r\n * ```JavaScript\r\n * // Can pass in chart type reference like this:\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // ... or chart class type as a string:\r\n * var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @param htmlElement Reference or id of the target container element\r\n * @param classType Class type of the target chart type\r\n * @return Chart instance\r\n */\r\nexport function create(htmlElement, classType) {\r\n // This is a nasty hack for the benefit of vanilla JS users, who do not\r\n // enjoy benefits of type-check anyway.\r\n // We're allowing passing in a name of the class rather than type reference\r\n // itself.\r\n var classError;\r\n if ($type.isString(classType)) {\r\n if ($type.hasValue(registry.registeredClasses[classType])) {\r\n classType = registry.registeredClasses[classType];\r\n }\r\n else {\r\n classType = registry.registeredClasses[\"Container\"];\r\n classError = new Error(\"Class [\" + classType + \"] is not loaded.\");\r\n }\r\n }\r\n // Create the chart\r\n var chart = createChild(htmlElement, classType);\r\n // Error?\r\n if (classError) {\r\n chart.raiseCriticalError(classError);\r\n }\r\n return chart;\r\n}\r\n/**\r\n * A shortcut to creating a chart from a config object.\r\n *\r\n * Example:\r\n *\r\n * ```TypeScript\r\n * let chart am4core.createFromConfig({ ... }, \"chartdiv\", am4charts.XYChart );\r\n * ```\r\n * ```JavaScript\r\n * var chart am4core.createFromConfig({ ... }, \"chartdiv\", \"XYChart\" );\r\n * ```\r\n *\r\n * If `chartType` parameter is not supplied it must be set in a config object,\r\n * via reference to chart type, e.g.:\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": am4charts.XYChart,\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": am4charts.XYChart,\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * Or via string: (if you are using JavaScript)\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * A `container` can either be a reference to an HTML container to put chart\r\n * in, or it's unique id.\r\n *\r\n * If `container` is not specified, it must be included in the config object:\r\n *\r\n * ```TypeScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * \"container\": \"chartdiv\",\r\n * // ...\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * {\r\n * \"type\": \"XYChart\",\r\n * \"container\": \"chartdiv\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param config Config object in property/value pairs\r\n * @param htmlElement Container reference or ID\r\n * @param objectType Chart type\r\n * @return A newly created chart instance\r\n * @todo Throw exception if type is not correct\r\n */\r\nexport function createFromConfig(config, htmlElement, classType) {\r\n // Extract chart type from config if necessary\r\n if (!$type.hasValue(classType)) {\r\n classType = config.type;\r\n delete config.type;\r\n }\r\n // Extract element from config if necessary\r\n if (!$type.hasValue(htmlElement)) {\r\n htmlElement = config.container;\r\n delete config.container;\r\n }\r\n // Check if we need to extract actual type reference\r\n var finalType;\r\n var classError;\r\n if ($type.isString(classType) && $type.hasValue(registry.registeredClasses[classType])) {\r\n finalType = registry.registeredClasses[classType];\r\n }\r\n else if (typeof classType !== \"function\") {\r\n finalType = Container;\r\n classError = new Error(\"Class [\" + classType + \"] is not loaded.\");\r\n }\r\n else {\r\n finalType = classType;\r\n }\r\n // Create the chart\r\n var chart = createChild(htmlElement, finalType);\r\n // Set config\r\n if (classError) {\r\n chart.raiseCriticalError(classError);\r\n }\r\n else {\r\n chart.config = config;\r\n }\r\n return chart;\r\n}\r\n/**\r\n * Useful in creating real queues form mult-chart creation.\r\n *\r\n * Accepts a reference to a function which crates and returns actual chart\r\n * object.\r\n *\r\n * It returns a `Promise` which you can use to catch chart instance once it's\r\n * created.\r\n *\r\n * ```TypeScript\r\n * am4core.createDeferred(function(div) {\r\n * // Create first chart\r\n * let chart = am4core.create(div, am4charts.XYChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv1\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n *\r\n * am4core.createDeferred(function(div) {\r\n * // Create second chart\r\n * let chart = am4core.create(div, am4charts.PieChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv2\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n * ```\r\n * ```JavaScript\r\n * am4core.createDeferred(function(div) {\r\n * // Create first chart\r\n * var chart = am4core.create(div, am4charts.XYChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv1\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n *\r\n * am4core.createDeferred(function(div) {\r\n * // Create second chart\r\n * var chart = am4core.create(div, am4charts.PieChart);\r\n * // ...\r\n * return chart;\r\n * }, \"chartdiv2\").then(chart) {\r\n * // `chart` variable holds an instance of the chart\r\n * console.log(\"Chart ready\", chart);\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/performance/#Deferred_daisy_chained_instantiation} for more information\r\n * @since 4.10.0\r\n * @param callback Callback function that creates chart\r\n * @param scope Scope to call callback in\r\n * @param ...rest Parameters to pass into callback\r\n * @return Promise with chart instance\r\n */\r\nexport function createDeferred(callback, scope) {\r\n var rest = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n rest[_i - 2] = arguments[_i];\r\n }\r\n return new Promise(function (resolve, reject) {\r\n registry.deferred.push({\r\n scope: scope,\r\n callback: callback,\r\n args: rest,\r\n resolve: resolve\r\n });\r\n if (registry.deferred.length == 1) {\r\n processNextDeferred();\r\n }\r\n });\r\n}\r\nfunction processNextDeferred() {\r\n var _a;\r\n var next = registry.deferred[0];\r\n if (next) {\r\n var sprite_2 = (_a = next.callback).call.apply(_a, __spread([next.scope], next.args));\r\n sprite_2.events.on(\"ready\", function () {\r\n next.resolve(sprite_2);\r\n registry.deferred.shift();\r\n if (options.deferredDelay) {\r\n setTimeout(processNextDeferred, options.deferredDelay);\r\n }\r\n else {\r\n processNextDeferred();\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Applies a theme to System, and subsequently all chart instances created\r\n * from that point forward.\r\n *\r\n * amCharts supports multiple themes. Calling `useTheme` multiple times will\r\n * make the System apply multiple themes, rather than overwrite previously\r\n * set one.\r\n *\r\n * This enables combining features from multiple themes on the same chart.\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * am4core.useTheme(am4themes.material);\r\n * am4core.useTheme(am4themes.animated);\r\n * ```\r\n * ```JavaScript\r\n * am4core.useTheme(am4themes.material);\r\n * am4core.useTheme(am4themes.animated);\r\n * ```\r\n *\r\n * The above will apply both the Material color and animation options to all\r\n * charts created.\r\n *\r\n * @param value A reference to a theme\r\n */\r\nexport function useTheme(value) {\r\n if (registry.themes.indexOf(value) === -1) {\r\n registry.themes.push(value);\r\n }\r\n}\r\n/**\r\n * Removes a theme from \"active themes\" list, so it won't get applied to any\r\n * charts created subsequently.\r\n *\r\n * @param value A reference to a theme\r\n */\r\nexport function unuseTheme(value) {\r\n $array.remove(registry.themes, value);\r\n}\r\n/**\r\n * Removes all \"active\" themes. Any charts created subsequently will not have\r\n * any theme applied to them.\r\n */\r\nexport function unuseAllThemes() {\r\n registry.themes = [];\r\n}\r\n/**\r\n * Adds a license, e.g.:\r\n *\r\n * ```TypeScript\r\n * am4core.addLicense(\"xxxxxxxx\");\r\n * ```\r\n * ```JavaScript\r\n * am4core.addLicense(\"xxxxxxxx\");\r\n * ```\r\n *\r\n * Multiple licenses can be added to cover for multiple products.\r\n *\r\n * @since 4.5.16\r\n * @param license License key\r\n */\r\nexport function addLicense(license) {\r\n options.licenses.push(license);\r\n}\r\n//# sourceMappingURL=Instance.js.map","/**\r\n * This module contains a version of ColorSet that can (and should) be used for\r\n * coloring UI elements.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { registry } from \"../Registry\";\r\nimport { color } from \"./Color\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This module contains a version of ColorSet that can (and should) be used for\r\n * coloring UI elements.\r\n *\r\n * The main difference from the basic [[ColorSet]] is that instead of sequenced\r\n * colors, it uses a concept of named colors.\r\n *\r\n * This way, every element in the UI can extract an exact color theme author\r\n * meant for the specific purpose, like strokes, backgrounds, etc.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\r\nvar InterfaceColorSet = /** @class */ (function (_super) {\r\n __extends(InterfaceColorSet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function InterfaceColorSet() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Maps the list of purposes (like \"stroke\") to an index of color of the\r\n * color set.\r\n */\r\n _this._purposes = {\r\n stroke: color(\"#e5e5e5\"),\r\n fill: color(\"#f3f3f3\"),\r\n primaryButton: color(\"#6794dc\"),\r\n primaryButtonHover: color(\"#6771dc\"),\r\n primaryButtonDown: color(\"#68dc75\"),\r\n primaryButtonActive: color(\"#68dc75\"),\r\n primaryButtonText: color(\"#FFFFFF\"),\r\n primaryButtonStroke: color(\"#FFFFFF\"),\r\n secondaryButton: color(\"#d9d9d9\"),\r\n secondaryButtonHover: color(\"#d9d9d9\").brighten(-0.25),\r\n secondaryButtonDown: color(\"#d9d9d9\").brighten(-0.35),\r\n secondaryButtonActive: color(\"#d9d9d9\").brighten(0.35),\r\n secondaryButtonText: color(\"#000000\"),\r\n secondaryButtonStroke: color(\"#FFFFFF\"),\r\n grid: color(\"#000000\"),\r\n background: color(\"#ffffff\"),\r\n alternativeBackground: color(\"#000000\"),\r\n text: color(\"#000000\"),\r\n alternativeText: color(\"#FFFFFF\"),\r\n disabledBackground: color(\"#999999\"),\r\n positive: color(\"#67dc75\"),\r\n negative: color(\"#dc6788\")\r\n };\r\n _this.className = \"InterfaceColorSet\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n InterfaceColorSet.prototype.debug = function () { };\r\n /**\r\n * Returns a color to be used for the specific purpose.\r\n *\r\n * ```TypeScript\r\n * let uicolors = new am4core.InterfaceColorSet();\r\n * console.log(uicolors.getFor(\"stroke\"));\r\n * ```\r\n * ```JavaScript\r\n * var uicolors = new am4core.InterfaceColorSet();\r\n * console.log(uicolors.getFor(\"stroke\"));\r\n * ```\r\n *\r\n * @param purpose Color use purpuse\r\n * @return Color\r\n */\r\n InterfaceColorSet.prototype.getFor = function (purpose) {\r\n return this._purposes[purpose];\r\n };\r\n /**\r\n * Sets color to be used for the specific purpose.\r\n *\r\n * @param purpose Color use purpose\r\n * @param color Color\r\n */\r\n InterfaceColorSet.prototype.setFor = function (purpose, color) {\r\n this._purposes[purpose] = color;\r\n };\r\n return InterfaceColorSet;\r\n}(BaseObject));\r\nexport { InterfaceColorSet };\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[\"InterfaceColorSet\"] = InterfaceColorSet;\r\n//# sourceMappingURL=InterfaceColorSet.js.map","import * as $array from \"./Array\";\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function fromArray(array) {\r\n return function (push) {\r\n var length = array.length;\r\n for (var i = 0; i < length; ++i) {\r\n if (!push(array[i])) {\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function length(iter) {\r\n var sum = 0;\r\n iter(function (_) {\r\n ++sum;\r\n return true;\r\n });\r\n return sum;\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function toArray(iter) {\r\n var output = [];\r\n iter(function (value) {\r\n output.push(value);\r\n return true;\r\n });\r\n return output;\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function eachContinue(iter, fn) {\r\n iter(fn);\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function each(iter, fn) {\r\n iter(function (value) {\r\n fn(value);\r\n return true;\r\n });\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function sort(iter, fn) {\r\n return fromArray(toArray(iter).sort(fn));\r\n}\r\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function map(iter, fn) {\r\n return function (push) { return iter(function (value) { return push(fn(value)); }); };\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function filter(iter, fn) {\r\n return function (push) { return iter(function (value) {\r\n if (fn(value)) {\r\n return push(value);\r\n }\r\n else {\r\n return true;\r\n }\r\n }); };\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function concat() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n return function (push) {\r\n var go = true;\r\n var push2 = function (value) { return (go = push(value)); };\r\n var length = args.length;\r\n for (var i = 0; i < length; ++i) {\r\n args[i](push2);\r\n if (!go) {\r\n break;\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function flatten(iter) {\r\n return function (push) {\r\n var go = true;\r\n var push2 = function (value) { return (go = push(value)); };\r\n iter(function (value) {\r\n value(push2);\r\n return go;\r\n });\r\n };\r\n}\r\n/**\r\n * [number description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function indexed(iter) {\r\n return function (push) {\r\n var index = 0;\r\n iter(function (value) { return push([index++, value]); });\r\n };\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function findIndex(iter, matches) {\r\n var found = false;\r\n var i = 0;\r\n iter(function (value) {\r\n if (matches(value)) {\r\n found = true;\r\n return false;\r\n }\r\n else {\r\n ++i;\r\n return true;\r\n }\r\n });\r\n return (found ? i : -1);\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function find(iter, matches) {\r\n var output;\r\n iter(function (value) {\r\n if (matches(value)) {\r\n output = value;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n return output;\r\n}\r\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function findMap(iter, matches) {\r\n var output;\r\n iter(function (value) {\r\n var v = matches(value);\r\n if (v !== null) {\r\n output = v;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n return output;\r\n}\r\n/**\r\n * [iter description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function contains(iter, matches) {\r\n var output = false;\r\n iter(function (value) {\r\n if (matches(value)) {\r\n output = true;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n return output;\r\n}\r\n/**\r\n * [A description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport function foldl(iter, init, fn) {\r\n iter(function (value) {\r\n init = fn(init, value);\r\n return true;\r\n });\r\n return init;\r\n}\r\n/**\r\n * [min2 description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param left [description]\r\n * @param right [description]\r\n * @return [description]\r\n */\r\nfunction min2(left, right) {\r\n if (left == null || right < left) {\r\n return right;\r\n }\r\n else {\r\n return left;\r\n }\r\n}\r\n/**\r\n * [min description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Verify that this works correctly\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\r\nexport function min(a) {\r\n return foldl(a, null, min2);\r\n}\r\n/**\r\n * [max2 description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param left [description]\r\n * @param right [description]\r\n * @return [description]\r\n */\r\nfunction max2(left, right) {\r\n if (left == null || right > left) {\r\n return right;\r\n }\r\n else {\r\n return left;\r\n }\r\n}\r\n/**\r\n * [max description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Verify that this works correctly\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\r\nexport function max(a) {\r\n return foldl(a, null, max2);\r\n}\r\n/**\r\n * [join description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param iter [description]\r\n * @param separator [description]\r\n * @return [description]\r\n */\r\nexport function join(iter, separator) {\r\n if (separator === void 0) { separator = \"\"; }\r\n var first = true;\r\n var init = \"\";\r\n iter(function (value) {\r\n if (first) {\r\n first = false;\r\n }\r\n else {\r\n init += separator;\r\n }\r\n init += value;\r\n return true;\r\n });\r\n return init;\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nvar ListIterator = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n *\r\n * @param list [description]\r\n * @param create [description]\r\n */\r\n function ListIterator(list, create) {\r\n // flag specifies if iterator should create new list item if it is reqested for a nextItem but there is no more left in the list\r\n this.createNewItems = false;\r\n this.list = list;\r\n this._create = create;\r\n this.reset();\r\n }\r\n ListIterator.prototype.reset = function () {\r\n this._listCopy = toArray(this.list.iterator());\r\n };\r\n ListIterator.prototype.clear = function () {\r\n this._listCopy.length = 0;\r\n };\r\n ListIterator.prototype.getFirst = function () {\r\n return this.returnItem(0);\r\n };\r\n ListIterator.prototype.getLast = function () {\r\n return this.returnItem(this._listCopy.length - 1);\r\n };\r\n ListIterator.prototype.find = function (fn) {\r\n var index = $array.findIndex(this._listCopy, fn);\r\n if (index !== -1) {\r\n var item = this._listCopy[index];\r\n // TODO use removeIndex instead ?\r\n $array.remove(this._listCopy, item);\r\n return item;\r\n }\r\n else {\r\n return this.getLast();\r\n }\r\n };\r\n ListIterator.prototype.removeItem = function (item) {\r\n return $array.remove(this._listCopy, item);\r\n };\r\n ListIterator.prototype.returnItem = function (index) {\r\n if (index >= 0 && index < this._listCopy.length) {\r\n var item = this._listCopy[index];\r\n // TODO use removeIndex instead ?\r\n $array.remove(this._listCopy, item);\r\n return item;\r\n }\r\n else if (this.createNewItems) {\r\n return this._create();\r\n }\r\n };\r\n ListIterator.prototype.iterator = function () {\r\n return fromArray(this._listCopy);\r\n };\r\n return ListIterator;\r\n}());\r\nexport { ListIterator };\r\n//# sourceMappingURL=Iterator.js.map","/**\r\n * A collection of keyboard-related utilities accessible via `keyboard`\r\n * instance.\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $type from \"./Type\";\r\n/**\r\n * A class that represents collection of keyboard-related utilities.\r\n *\r\n * Do not instantiate this class directly, but rather use `keyboard` variable.\r\n */\r\nvar Keyboard = /** @class */ (function () {\r\n function Keyboard() {\r\n }\r\n /**\r\n * Returns a named key based on information contained in the event or\r\n * \"other\".\r\n *\r\n * @param ev A keyboard event\r\n * @return Keyboard named key\r\n */\r\n Keyboard.prototype.getEventKey = function (ev) {\r\n // Get the key code\r\n var code = ev.keyCode || ev.which, key;\r\n // Map to internal key\r\n switch (code) {\r\n case 38:\r\n key = \"up\";\r\n break;\r\n case 40:\r\n key = \"down\";\r\n break;\r\n case 37:\r\n key = \"left\";\r\n break;\r\n case 39:\r\n key = \"right\";\r\n break;\r\n case 13:\r\n key = \"enter\";\r\n break;\r\n case 27:\r\n key = \"esc\";\r\n break;\r\n case 36:\r\n key = \"home\";\r\n break;\r\n case 35:\r\n key = \"end\";\r\n break;\r\n case 9:\r\n key = \"tab\";\r\n break;\r\n case 17:\r\n key = \"ctrl\";\r\n break;\r\n case 18:\r\n key = \"alt\";\r\n break;\r\n case 16:\r\n key = \"shift\";\r\n break;\r\n case 32:\r\n key = \"space\";\r\n break;\r\n case 36:\r\n key = \"home\";\r\n break;\r\n case 35:\r\n key = \"end\";\r\n break;\r\n case 33:\r\n key = \"pgup\";\r\n break;\r\n case 34:\r\n key = \"pgdn\";\r\n break;\r\n case 45:\r\n key = \"ins\";\r\n break;\r\n case 46:\r\n key = \"del\";\r\n break;\r\n case 107:\r\n key = \"plus\";\r\n break;\r\n case 109:\r\n key = \"minus\";\r\n break;\r\n default:\r\n key = \"other\";\r\n break;\r\n }\r\n return key;\r\n };\r\n /**\r\n * Checks if event key is one or more of the selected named keys.\r\n *\r\n * @param ev Keyboard event\r\n * @param key Named key or array of keys\r\n * @return Is event key one of the list?\r\n */\r\n Keyboard.prototype.isKey = function (ev, key) {\r\n var eventKey = this.getEventKey(ev);\r\n if ($type.isString(key)) {\r\n key = [key];\r\n }\r\n return key.indexOf(eventKey) !== -1;\r\n };\r\n /**\r\n * Returns `true` if shift key was presset at the moment of the event.\r\n *\r\n * @param ev Event object\r\n * @return Was shift pressed?\r\n */\r\n Keyboard.prototype.shiftKey = function (ev) {\r\n return ev.shiftKey;\r\n };\r\n /**\r\n * Returns `true` if ctrl key was presset at the moment of the event.\r\n *\r\n * @param ev Event object\r\n * @return Was ctrl pressed?\r\n */\r\n Keyboard.prototype.ctrlKey = function (ev) {\r\n return ev.ctrlKey;\r\n };\r\n /**\r\n * Returns `true` if alt key was presset at the moment of the event\r\n * @param ev Event object\r\n * @return Was alt pressed?\r\n */\r\n Keyboard.prototype.altKey = function (ev) {\r\n return ev.altKey;\r\n };\r\n /**\r\n * Returns `true` if meta key was presset at the moment of the event\r\n * @param ev Event object\r\n * @return Was meta pressed?\r\n */\r\n Keyboard.prototype.metaKey = function (ev) {\r\n return ev.metaKey;\r\n };\r\n return Keyboard;\r\n}());\r\nexport { Keyboard };\r\n/**\r\n * A single [[Keyboard]] instance to be reused across all elements so that\r\n * they don't need to instantiate their own.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var keyboard = new Keyboard();\r\n//# sourceMappingURL=Keyboard.js.map","/**\r\n * Language module contains everything related to language-specific operations:\r\n * * Translating prompts\r\n * * Translating functions\r\n * * Date format localizations\r\n */\r\nimport { __extends, __read, __spread } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { Adapter } from \"./Adapter\";\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\nimport en from \"../../../lang/en\";\r\nimport { options } from \"../Options\";\r\n;\r\n;\r\n/**\r\n * Handles all language-related tasks, like loading and storing translations,\r\n * translating prompts, lists of prompts and even functions.\r\n *\r\n * Almost every object in amCharts4 universe will have a `language` property,\r\n * which can be accessed for prompt translation.\r\n *\r\n * @see {@link ILanguageAdapters} for a list of available Adapters\r\n * @todo Make prompt keys case-insensitive\r\n * @important\r\n */\r\nvar Language = /** @class */ (function (_super) {\r\n __extends(Language, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Language() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n /**\r\n * Current locale.\r\n */\r\n _this._locale = en;\r\n /**\r\n * Default locale. A locale to fall back to if none is specified, or\r\n * if there's no translation for the prompt for the current language.\r\n */\r\n _this._defaultLocale = en;\r\n _this.className = \"Language\";\r\n // Set default language if necessary\r\n if ($type.hasValue(options.defaultLocale)) {\r\n _this.locale = options.defaultLocale;\r\n }\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns locale that is currently used.\r\n *\r\n * @param locale Force locale. Will use current language if not set.\r\n * @return Locale\r\n */\r\n Language.prototype.getLocale = function (locale) {\r\n if (locale == null) {\r\n locale = this._locale;\r\n }\r\n return this.adapter.apply(\"locale\", {\r\n locale: locale\r\n }).locale;\r\n };\r\n /**\r\n * Returns the translation of the string.\r\n *\r\n * If the translation is empty, it will return untranslated prompt.\r\n *\r\n * Third parameter and up are strings that can be used to replace \"%X\"\r\n * placeholders in prompt.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Results in \"This is a first translation test\"\r\n * chart.language.translate(\"This is a %1 translation %2\", null, \"first\", \"test\");\r\n * ```\r\n * ```JavaScriptScript\r\n * // Results in \"This is a first translation test\"\r\n * chart.language.translate(\"This is a %1 translation %2\", null, \"first\", \"test\");\r\n * ```\r\n *\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param rest Parameters to replace in string\r\n * @return Translation\r\n */\r\n Language.prototype.translate = function (prompt, locale) {\r\n var rest = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n rest[_i - 2] = arguments[_i];\r\n }\r\n // Get langauge\r\n locale = this.getLocale(locale);\r\n // Init translation\r\n var translation = prompt;\r\n // Get translations for the locale\r\n var translations = this.getTranslations(locale);\r\n var value = translations[prompt];\r\n // Try to look for the translation\r\n if (value === null) {\r\n translation = \"\";\r\n }\r\n else if ($type.hasValue(value)) {\r\n // It might be an empty string\r\n if (value) {\r\n translation = value;\r\n }\r\n }\r\n else if (locale !== this._defaultLocale) {\r\n // Try to look in default language\r\n return this.translate.apply(this, __spread([prompt, this._defaultLocale], rest));\r\n }\r\n // Replace %1, %2, etc params\r\n if (rest.length) {\r\n for (var len = rest.length, i = 0; i < len; ++i) {\r\n translation = translation.split(\"%\" + (i + 1)).join(rest[i]);\r\n }\r\n }\r\n // Return the translation\r\n return this.adapter.apply(\"translate\", {\r\n translation: translation,\r\n locale: locale\r\n }).translation;\r\n };\r\n /**\r\n * Non-type-checked translation.\r\n *\r\n * Can be used by plugins and other code that may have their own non-standard\r\n * translation prompts.\r\n *\r\n * @since 4.5.5\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param rest Parameters to replace in string\r\n * @return Translation\r\n */\r\n Language.prototype.translateAny = function (prompt, locale) {\r\n var rest = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n rest[_i - 2] = arguments[_i];\r\n }\r\n return this.translate.apply(this, __spread([prompt, locale], rest));\r\n };\r\n /**\r\n * Sets a prompt translation.\r\n *\r\n * @since 4.9.35\r\n * @param prompt Prompt in English\r\n * @param translation Translation\r\n * @param locale Locale\r\n */\r\n Language.prototype.setTranslationAny = function (prompt, translation, locale) {\r\n var localeTarget = locale || this.locale;\r\n localeTarget[prompt] = translation;\r\n };\r\n /**\r\n * Translates prompt.\r\n *\r\n * If translation is empty, it will return empty string, which is a different\r\n * behavior than that of regular `translate`.\r\n *\r\n * @param prompt A string to translate\r\n * @param locale Force translation into specific locale, e.g. fr_FR\r\n * @param ...rest Parameters to replace in string\r\n * @return Translation\r\n */\r\n Language.prototype.translateEmpty = function (prompt, locale) {\r\n var rest = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n rest[_i - 2] = arguments[_i];\r\n }\r\n var translation = this.translate.apply(this, __spread([prompt, locale], rest));\r\n return translation == prompt ? \"\" : translation;\r\n };\r\n /**\r\n * Translates a function.\r\n *\r\n * This method will return a function reference, but will not run it. It's\r\n * up to the caller script to run the function.\r\n *\r\n * @param prompt A function id to translate\r\n * @param locale Force translation into specific locale. e.g. fr_FR\r\n * @return A language-specific version of the function\r\n * @todo Apply adapter\r\n */\r\n Language.prototype.translateFunc = function (prompt, locale) {\r\n // Get langauge\r\n locale = this.getLocale(locale);\r\n // Get translations for the locale\r\n var translations = this.getTranslations(locale);\r\n var value = translations[prompt];\r\n // Try to look for the translation\r\n if (value != null) {\r\n return value;\r\n }\r\n // Try to look in default language\r\n if (locale !== this._defaultLocale) {\r\n return this.translateFunc(prompt, this._defaultLocale);\r\n }\r\n // Fail - return empty function\r\n return function () {\r\n return \"\";\r\n };\r\n };\r\n /**\r\n * Translates a list of prompts in one go.\r\n *\r\n * @param list An array of strings to translate\r\n * @param locale Force translation into specific locale. e.g. fr_FR\r\n * @return An array of translated strings in the same order as source list\r\n */\r\n Language.prototype.translateAll = function (list, locale) {\r\n var _this = this;\r\n // Translate all items in the list\r\n if (!this.isDefault()) {\r\n return $array.map(list, function (x) { return _this.translate(x, locale); });\r\n }\r\n else {\r\n return list;\r\n }\r\n };\r\n /**\r\n * Returns `true` if the currently selected locale is a default locale.\r\n *\r\n * @return `true` if locale is default; `false` if it is not.\r\n */\r\n Language.prototype.isDefault = function () {\r\n return this._defaultLocale === this._locale;\r\n };\r\n Object.defineProperty(Language.prototype, \"locale\", {\r\n /**\r\n * @return Locale definition\r\n */\r\n get: function () {\r\n return this._locale;\r\n },\r\n /**\r\n * Current locale.\r\n *\r\n * @param value Locale definition (translations)\r\n */\r\n set: function (value) {\r\n if (this._locale != value) {\r\n this._locale = value;\r\n if (this.events.isEnabled(\"localechanged\")) {\r\n var event_1 = {\r\n type: \"localechanged\",\r\n locale: value,\r\n target: this\r\n };\r\n this.events.dispatchImmediately(\"localechanged\", event_1);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns translations for a given locale.\r\n *\r\n * @ignore\r\n * @deprecated\r\n * @param locale Locale\r\n * @return Translations\r\n */\r\n Language.prototype.getTranslations = function (locale) {\r\n return this.adapter.apply(\"translations\", {\r\n translations: locale,\r\n locale: locale\r\n }).translations;\r\n };\r\n return Language;\r\n}(BaseObjectEvents));\r\nexport { Language };\r\n//# sourceMappingURL=Language.js.map","import { __extends, __generator } from \"tslib\";\r\nimport { Disposer, MultiDisposer } from \"./Disposer\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $array from \"./Array\";\r\nimport * as $iter from \"./Iterator\";\r\n/**\r\n * @todo Description\r\n */\r\nvar IndexedIterable = /** @class */ (function () {\r\n /**\r\n * Constructor.\r\n *\r\n * @param array List items\r\n * @param start Start index\r\n * @param end End index\r\n */\r\n function IndexedIterable(array, start, end) {\r\n this._array = array;\r\n this._start = start;\r\n this._end = end;\r\n }\r\n /**\r\n * Returns a list item iterator.\r\n *\r\n * @return Iterator\r\n */\r\n IndexedIterable.prototype.iterator = function () {\r\n var _this = this;\r\n return function (push) {\r\n if (_this._start !== _this._end) {\r\n if (_this._start < _this._end) {\r\n for (var i = _this._start; i < _this._end; ++i) {\r\n if (!push(_this._array[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = _this._start - 1; i >= _this._end; --i) {\r\n if (!push(_this._array[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n };\r\n /**\r\n * Returns an interable list sorted backwards than current list.\r\n *\r\n * @return List\r\n */\r\n IndexedIterable.prototype.backwards = function () {\r\n return new IndexedIterable(this._array, this._end, this._start);\r\n };\r\n /**\r\n * Returns a new list consisting only of specific range of items between\r\n * `start` and `end` indexes.\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return List\r\n */\r\n IndexedIterable.prototype.range = function (start, end) {\r\n if (start <= end) {\r\n if (this._start === this._end) {\r\n return this;\r\n }\r\n else if (this._start < this._end) {\r\n var diff = end - start;\r\n start = Math.max(this._start + start, this._start);\r\n end = Math.min(start + diff, this._end);\r\n return new IndexedIterable(this._array, start, end);\r\n }\r\n else {\r\n var diff = end - start;\r\n start = Math.max(this._start - start, this._end);\r\n end = Math.max(start - diff, this._end);\r\n return new IndexedIterable(this._array, start, end);\r\n }\r\n }\r\n else {\r\n throw new Error(\"Start index must be lower than end index\");\r\n }\r\n };\r\n return IndexedIterable;\r\n}());\r\nexport { IndexedIterable };\r\n/**\r\n * ListGrouper organizes [[List]] items into groups.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar ListGrouper = /** @class */ (function (_super) {\r\n __extends(ListGrouper, _super);\r\n /**\r\n * Constructor.\r\n */\r\n function ListGrouper(list, getKey, sort) {\r\n var _this = _super.call(this, [\r\n list.events.on(\"inserted\", function (x) {\r\n var value = x.newValue;\r\n var key = _this._getKey(value);\r\n var index = 0;\r\n $iter.eachContinue(list.iterator(), function (x) {\r\n if (x === value) {\r\n return false;\r\n }\r\n else if (_this._getKey(x) === key) {\r\n ++index;\r\n }\r\n return true;\r\n });\r\n _this._insert(value, key, index);\r\n }, undefined, false),\r\n list.events.on(\"removed\", function (x) {\r\n _this._remove(x.oldValue);\r\n }, undefined, false)\r\n ]) || this;\r\n /**\r\n * Grouping keys.\r\n */\r\n _this._keys = [];\r\n /**\r\n * List item groups.\r\n */\r\n _this._groups = {};\r\n _this._getKey = getKey;\r\n _this._sort = sort;\r\n $iter.each(list.iterator(), function (x) {\r\n _this._insert(x, getKey(x));\r\n });\r\n return _this;\r\n }\r\n /**\r\n * Inserts an item (`x`) to a specific group (`key`) and specific `index`.\r\n *\r\n * @param x Item\r\n * @param key Group name\r\n * @param index Index\r\n */\r\n ListGrouper.prototype._insert = function (x, key, index) {\r\n if (this._groups[key] == null) {\r\n this._groups[key] = [];\r\n // TODO code duplication with SortedList\r\n var _a = $array.getSortedIndex(this._keys, this._sort, key), found = _a.found, index_1 = _a.index;\r\n if (found) {\r\n throw new Error(\"Key already exists: \" + key);\r\n }\r\n else {\r\n $array.insertIndex(this._keys, index_1, key);\r\n }\r\n }\r\n if (index == null) {\r\n this._groups[key].push(x);\r\n }\r\n else {\r\n $array.insertIndex(this._groups[key], index, x);\r\n }\r\n };\r\n /**\r\n * Removes an item from the list.\r\n *\r\n * @param x Item to remove\r\n */\r\n ListGrouper.prototype._remove = function (x) {\r\n var key = this._getKey(x);\r\n var values = this._groups[key];\r\n if (values != null) {\r\n $array.remove(values, x);\r\n if (values.length === 0) {\r\n delete this._groups[key];\r\n var _a = $array.getSortedIndex(this._keys, this._sort, key), found = _a.found, index = _a.index;\r\n if (found) {\r\n $array.removeIndex(this._keys, index);\r\n }\r\n else {\r\n throw new Error(\"Key doesn't exist: \" + key);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Returns an iterator for the list.\r\n *\r\n * The iterator will iterate through all items in all groups.\r\n *\r\n * @return Iterator\r\n */\r\n ListGrouper.prototype.iterator = function () {\r\n var _this = this;\r\n return $iter.flatten($iter.map($iter.fromArray(this._keys), function (key) {\r\n return $iter.fromArray(_this._groups[key]);\r\n }));\r\n };\r\n return ListGrouper;\r\n}(MultiDisposer));\r\nexport { ListGrouper };\r\n/**\r\n * A disposable list, which when disposed itself will call `dispose()` method\r\n * on all its items.\r\n */\r\nvar ListDisposer = /** @class */ (function (_super) {\r\n __extends(ListDisposer, _super);\r\n function ListDisposer(list, disposeOnRemove) {\r\n if (disposeOnRemove === void 0) { disposeOnRemove = true; }\r\n var _this = this;\r\n if (disposeOnRemove) {\r\n var disposer_1 = list.events.on(\"removed\", function (x) {\r\n x.oldValue.dispose();\r\n }, undefined, false);\r\n _this = _super.call(this, function () {\r\n disposer_1.dispose();\r\n // TODO clear the list ?\r\n $iter.each(list.iterator(), function (x) {\r\n x.dispose();\r\n });\r\n }) || this;\r\n }\r\n else {\r\n _this = _super.call(this, function () {\r\n // TODO clear the list ?\r\n $iter.each(list.iterator(), function (x) {\r\n x.dispose();\r\n });\r\n }) || this;\r\n }\r\n return _this;\r\n }\r\n return ListDisposer;\r\n}(Disposer));\r\nexport { ListDisposer };\r\n/**\r\n * Checks if specific index fits into length.\r\n *\r\n * @param index Index\r\n * @param len Length\r\n */\r\nfunction checkBounds(index, len) {\r\n if (!(index >= 0 && index < len)) {\r\n throw new Error(\"Index out of bounds: \" + index);\r\n }\r\n}\r\n/**\r\n * A List class is used to hold a number of indexed items of the same type.\r\n */\r\nvar List = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\r\n function List(initial) {\r\n if (initial === void 0) { initial = []; }\r\n /**\r\n * Event dispatcher.\r\n */\r\n this.events = new EventDispatcher();\r\n this._values = initial;\r\n }\r\n Object.defineProperty(List.prototype, \"values\", {\r\n /**\r\n * An array of values in the list.\r\n *\r\n * Do not use this property to add values. Rather use dedicated methods, like\r\n * `push()`, `removeIndex()`, etc.\r\n *\r\n * @readonly\r\n * @return List values\r\n */\r\n get: function () {\r\n return this._values;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Checks if list contains specific item reference.\r\n *\r\n * @param item Item to search for\r\n * @return `true` if found, `false` if not found\r\n */\r\n List.prototype.contains = function (value) {\r\n return this._values.indexOf(value) !== -1;\r\n };\r\n /**\r\n * Removes specific item from the list.\r\n *\r\n * @param item An item to remove\r\n */\r\n List.prototype.removeValue = function (value) {\r\n var i = 0;\r\n var length = this._values.length;\r\n while (i < length) {\r\n // TODO handle NaN\r\n if (this._values[i] === value) {\r\n this.removeIndex(i);\r\n --length;\r\n }\r\n else {\r\n ++i;\r\n }\r\n }\r\n };\r\n /**\r\n * Searches the list for specific item and returns its index.\r\n *\r\n * @param item An item to search for\r\n * @return Index or -1 if not found\r\n */\r\n List.prototype.indexOf = function (value) {\r\n return $array.indexOf(this._values, value);\r\n };\r\n Object.defineProperty(List.prototype, \"length\", {\r\n /**\r\n * Number of items in list.\r\n *\r\n * @readonly\r\n * @return Number of items\r\n */\r\n get: function () {\r\n return this._values.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Checks if there's a value at specific index.\r\n *\r\n * @param index Index\r\n * @return Value exists?\r\n */\r\n List.prototype.hasIndex = function (index) {\r\n return index >= 0 && index < this._values.length;\r\n };\r\n /**\r\n * Returns an item at specified index.\r\n *\r\n * @param index Index\r\n * @return List item\r\n */\r\n List.prototype.getIndex = function (index) {\r\n return this._values[index];\r\n };\r\n /**\r\n * Sets value at specific index.\r\n *\r\n * If there's already a value at the index, it is overwritten.\r\n *\r\n * @param index Index\r\n * @param value New value\r\n * @return New value\r\n */\r\n List.prototype.setIndex = function (index, value) {\r\n checkBounds(index, this._values.length);\r\n var oldValue = this._values[index];\r\n // Do nothing if the old value and the new value are the same\r\n if (oldValue !== value) {\r\n this._values[index] = value;\r\n if (this.events.isEnabled(\"setIndex\")) {\r\n this.events.dispatchImmediately(\"setIndex\", {\r\n type: \"setIndex\",\r\n target: this,\r\n index: index,\r\n oldValue: oldValue,\r\n newValue: value\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n oldValue: oldValue\r\n });\r\n }\r\n if (this.events.isEnabled(\"inserted\")) {\r\n this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: this,\r\n newValue: value\r\n });\r\n }\r\n }\r\n return oldValue;\r\n };\r\n /**\r\n * Adds an item to the list at a specific index, which pushes all the other\r\n * items further down the list.\r\n *\r\n * @param index Index\r\n * @param item An item to add\r\n */\r\n List.prototype.insertIndex = function (index, value) {\r\n checkBounds(index, this._values.length + 1);\r\n $array.insertIndex(this._values, index, value);\r\n if (this.events.isEnabled(\"insertIndex\")) {\r\n this.events.dispatchImmediately(\"insertIndex\", {\r\n type: \"insertIndex\",\r\n target: this,\r\n index: index,\r\n newValue: value\r\n });\r\n }\r\n if (this.events.isEnabled(\"inserted\")) {\r\n this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: this,\r\n newValue: value\r\n });\r\n }\r\n };\r\n /**\r\n * [_sortQuicksort description]\r\n *\r\n * @todo Description\r\n * @param low [description]\r\n * @param high [description]\r\n * @param order [description]\r\n */\r\n List.prototype._sortQuicksort = function (low, high, order) {\r\n if (low < high) {\r\n var p = this._sortPartition(low, high, order);\r\n this._sortQuicksort(low, p, order);\r\n this._sortQuicksort(p + 1, high, order);\r\n }\r\n };\r\n /**\r\n * [_sortPartition description]\r\n *\r\n * @todo Description\r\n * @param low [description]\r\n * @param high [description]\r\n * @param order [description]\r\n * @return [description]\r\n */\r\n List.prototype._sortPartition = function (low, high, order) {\r\n var values = this._values;\r\n var pivot = values[low];\r\n var i = low - 1;\r\n var j = high + 1;\r\n for (;;) {\r\n do {\r\n ++i;\r\n } while (order(values[i], pivot) < 0);\r\n do {\r\n --j;\r\n } while (order(values[j], pivot) > 0);\r\n if (i >= j) {\r\n return j;\r\n }\r\n else {\r\n this.swap(i, j);\r\n }\r\n }\r\n };\r\n /**\r\n * Reorders list items according to specific ordering function.\r\n *\r\n * @param order Ordering function\r\n */\r\n List.prototype.sort = function (order) {\r\n // https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\r\n // @todo faster implementation of this\r\n // @todo test this\r\n this._sortQuicksort(0, this._values.length - 1, order);\r\n };\r\n /**\r\n * Swaps indexes of two items in the list.\r\n *\r\n * @param a Item 1\r\n * @param b Item 2\r\n */\r\n List.prototype.swap = function (a, b) {\r\n var len = this._values.length;\r\n checkBounds(a, len);\r\n checkBounds(b, len);\r\n if (a !== b) {\r\n var value_a = this._values[a];\r\n var value_b = this._values[b];\r\n this._values[a] = value_b;\r\n if (this.events.isEnabled(\"setIndex\")) {\r\n this.events.dispatchImmediately(\"setIndex\", {\r\n type: \"setIndex\",\r\n target: this,\r\n index: a,\r\n oldValue: value_a,\r\n newValue: value_b\r\n });\r\n }\r\n this._values[b] = value_a;\r\n if (this.events.isEnabled(\"setIndex\")) {\r\n this.events.dispatchImmediately(\"setIndex\", {\r\n type: \"setIndex\",\r\n target: this,\r\n index: b,\r\n oldValue: value_b,\r\n newValue: value_a\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Removes a value at specific index.\r\n *\r\n * @param index Index of value to remove\r\n * @return Removed value\r\n */\r\n List.prototype.removeIndex = function (index) {\r\n checkBounds(index, this._values.length);\r\n var oldValue = this._values[index];\r\n $array.removeIndex(this._values, index);\r\n if (this.events.isEnabled(\"removeIndex\")) {\r\n this.events.dispatchImmediately(\"removeIndex\", {\r\n type: \"removeIndex\",\r\n target: this,\r\n index: index,\r\n oldValue: oldValue\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n oldValue: oldValue\r\n });\r\n }\r\n return oldValue;\r\n };\r\n /**\r\n * Moves an item to a specific index within the list.\r\n *\r\n * If the index is not specified it will move the item to the end of the\r\n * list.\r\n *\r\n * @param value Item to move\r\n * @param index Index to place item at\r\n */\r\n List.prototype.moveValue = function (value, toIndex) {\r\n // TODO don't do anything if the desired index is the same as the current index\r\n var index = this.indexOf(value);\r\n // TODO remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n var oldValue = this._values[index];\r\n $array.removeIndex(this._values, index);\r\n if (this.events.isEnabled(\"removeIndex\")) {\r\n this.events.dispatchImmediately(\"removeIndex\", {\r\n type: \"removeIndex\",\r\n target: this,\r\n index: index,\r\n oldValue: oldValue\r\n });\r\n }\r\n }\r\n if (toIndex == null) {\r\n toIndex = this._values.length;\r\n this._values.push(value);\r\n }\r\n else {\r\n $array.insertIndex(this._values, toIndex, value);\r\n }\r\n if (this.events.isEnabled(\"insertIndex\")) {\r\n this.events.dispatchImmediately(\"insertIndex\", {\r\n type: \"insertIndex\",\r\n target: this,\r\n index: toIndex,\r\n newValue: value\r\n });\r\n }\r\n if (index === -1) {\r\n if (this.events.isEnabled(\"inserted\")) {\r\n this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: this,\r\n newValue: value\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Adds an item to the end of the list.\r\n *\r\n * @param item An item to add\r\n */\r\n List.prototype.push = function (value) {\r\n var index = this._values.push(value) - 1;\r\n if (this.events.isEnabled(\"insertIndex\")) {\r\n this.events.dispatchImmediately(\"insertIndex\", {\r\n type: \"insertIndex\",\r\n target: this,\r\n index: index,\r\n newValue: value\r\n });\r\n }\r\n if (this.events.isEnabled(\"inserted\")) {\r\n this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: this,\r\n newValue: value\r\n });\r\n }\r\n return value;\r\n };\r\n /**\r\n * Adds an item as a first item in the list.\r\n *\r\n * @param item An item to add\r\n */\r\n List.prototype.unshift = function (value) {\r\n this.insertIndex(0, value);\r\n };\r\n /**\r\n * Adds multiple items to the list.\r\n *\r\n * @param items An Array of items to add\r\n */\r\n List.prototype.pushAll = function (values) {\r\n var _this = this;\r\n $array.each(values, function (value) {\r\n _this.push(value);\r\n });\r\n };\r\n /**\r\n * Copies and adds items from abother list.\r\n *\r\n * @param source A list top copy items from\r\n */\r\n List.prototype.copyFrom = function (source) {\r\n this.pushAll(source._values);\r\n };\r\n /**\r\n * Returns the last item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n List.prototype.pop = function () {\r\n var index = this._values.length - 1;\r\n return index < 0 ? undefined : this.removeIndex(this._values.length - 1);\r\n };\r\n /**\r\n * Returns the first item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n List.prototype.shift = function () {\r\n return this._values.length ? this.removeIndex(0) : undefined;\r\n };\r\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\r\n List.prototype.setAll = function (newArray) {\r\n var _this = this;\r\n // @tod if a value exists in both the new and old arrays, don't send remove/insert events\r\n var oldArray = $array.copy(this._values);\r\n this._values.length = 0;\r\n $array.each(newArray, function (value) {\r\n _this._values.push(value);\r\n });\r\n if (this.events.isEnabled(\"setAll\")) {\r\n this.events.dispatchImmediately(\"setAll\", {\r\n type: \"setAll\",\r\n target: this,\r\n oldArray: oldArray,\r\n newArray: this._values // TODO make a copy ?\r\n });\r\n }\r\n if (this.events.isEnabled(\"removed\")) {\r\n $array.each(oldArray, function (x) {\r\n _this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: _this,\r\n oldValue: x\r\n });\r\n });\r\n }\r\n if (this.events.isEnabled(\"inserted\")) {\r\n $array.each(this._values, function (x) {\r\n _this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: _this,\r\n newValue: x\r\n });\r\n });\r\n }\r\n };\r\n /**\r\n * Removes all items from the list.\r\n */\r\n List.prototype.clear = function () {\r\n this.setAll([]);\r\n };\r\n /**\r\n * Returns a list iterator.\r\n *\r\n * @return Iterator\r\n */\r\n List.prototype.iterator = function () {\r\n return $iter.fromArray(this._values);\r\n };\r\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\r\n List.prototype[Symbol.iterator] = function () {\r\n var length, i;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n length = this._values.length;\r\n i = 0;\r\n _a.label = 1;\r\n case 1:\r\n if (!(i < length)) return [3 /*break*/, 4];\r\n return [4 /*yield*/, this._values[i]];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3:\r\n ++i;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n /**\r\n * Calls `f` for each element in the list.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\r\n List.prototype.each = function (f) {\r\n $array.each(this._values, f);\r\n };\r\n /**\r\n * Returns a specific range of list items, which can be iterated.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Code duplication with IndexedIterable\r\n * @param start Start index\r\n * @param end End index\r\n * @return Range\r\n */\r\n List.prototype.range = function (start, end) {\r\n if (start <= end) {\r\n var diff = end - start;\r\n start = Math.max(start, 0);\r\n end = Math.min(start + diff, this._values.length);\r\n return new IndexedIterable(this._values, start, end);\r\n }\r\n else {\r\n throw new Error(\"Start index must be lower than end index\");\r\n }\r\n };\r\n /**\r\n * Returns an iterator that has list items sorted backwards.\r\n *\r\n * @ignore Exclude from docs\r\n * @return List\r\n */\r\n List.prototype.backwards = function () {\r\n return new IndexedIterable(this._values, this._values.length, 0);\r\n };\r\n return List;\r\n}());\r\nexport { List };\r\n/**\r\n * A version of a [[List]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\r\nvar ListTemplate = /** @class */ (function (_super) {\r\n __extends(ListTemplate, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\r\n function ListTemplate(t) {\r\n var _this = _super.call(this) || this;\r\n _this.template = t;\r\n return _this;\r\n }\r\n Object.defineProperty(ListTemplate.prototype, \"template\", {\r\n /**\r\n * @return Template object\r\n */\r\n get: function () {\r\n return this._template;\r\n },\r\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\r\n set: function (v) {\r\n v.isTemplate = true;\r\n this._template = v;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\r\n ListTemplate.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source.iterator(), function (value) {\r\n _this.push(value.clone());\r\n });\r\n };\r\n ListTemplate.prototype.create = function (make) {\r\n var clone = (make != null\r\n ? new make()\r\n : this.template.clone());\r\n this.push(clone);\r\n return clone;\r\n };\r\n /**\r\n * Creates an exact clone of the list, including its items and template.\r\n *\r\n * @return New list\r\n */\r\n ListTemplate.prototype.clone = function () {\r\n var out = new ListTemplate(this.template);\r\n var values = this.values;\r\n var length = values.length;\r\n for (var i = 0; i < length; ++i) {\r\n out.push(values[i].clone());\r\n }\r\n return out;\r\n };\r\n return ListTemplate;\r\n}(List));\r\nexport { ListTemplate };\r\n//# sourceMappingURL=List.js.map","import { __read, __spread } from \"tslib\";\r\nimport { options } from \"../Options\";\r\n/**\r\n * Outputs string to console if `verbose` is `true`.\r\n */\r\nexport function log() {\r\n var messages = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n messages[_i] = arguments[_i];\r\n }\r\n if (options.verbose) {\r\n if (console) {\r\n console.log.apply(console, __spread(messages));\r\n }\r\n }\r\n}\r\n/**\r\n * Outputs a warning to the console.\r\n */\r\nexport function warn() {\r\n var messages = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n messages[_i] = arguments[_i];\r\n }\r\n if (!options.suppressWarnings) {\r\n if (console) {\r\n console.warn.apply(console, __spread(messages));\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Log.js.map","/**\r\n * A collection of Math-related functions\r\n *\r\n * @todo Comment trigonometric functions?\r\n */\r\nimport * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nexport var PI = Math.PI;\r\nexport var HALFPI = PI / 2;\r\nexport var RADIANS = PI / 180;\r\nexport var DEGREES = 180 / PI;\r\n/**\r\n * Converts any value and fits it into a specific value range.\r\n *\r\n * @param value Source value\r\n * @param min Minimum allowable value\r\n * @param max Maximum allowable value\r\n * @return Number\r\n */\r\nexport function toNumberRange(value, min, max) {\r\n if ($type.hasValue(value)) {\r\n value = $type.toNumber(value);\r\n return fitToRange(value, min, max);\r\n }\r\n return value;\r\n}\r\n/**\r\n * Rounds the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @param floor In case value ends with 0.5 and precision is 0, we might need to floor the value instead of ceiling it.\r\n * @return Rounded value\r\n */\r\nexport function round(value, precision, floor) {\r\n if (!$type.isNumber(precision) || precision <= 0) {\r\n var rounded = Math.round(value);\r\n if (floor) {\r\n if (rounded - value == 0.5) {\r\n rounded--;\r\n }\r\n }\r\n return rounded;\r\n }\r\n else {\r\n var d = Math.pow(10, precision);\r\n return Math.round(value * d) / d;\r\n }\r\n}\r\n/**\r\n * Ceils the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @return Rounded value\r\n */\r\nexport function ceil(value, precision) {\r\n if (!$type.isNumber(precision) || precision <= 0) {\r\n return Math.ceil(value);\r\n }\r\n else {\r\n var d = Math.pow(10, precision);\r\n return Math.ceil(value * d) / d;\r\n }\r\n}\r\n/**\r\n * Stretches `t` so that it will always be between `from` and `to`.\r\n *\r\n * @param t Number from 0 to 1\r\n * @param from Lowest possible value\r\n * @param to Highest possible value\r\n * @return Adjusted value\r\n */\r\nexport function stretch(t, from, to) {\r\n return (t * (to - from)) + from;\r\n}\r\n/**\r\n * Adjust numeric value so it fits to specific value range.\r\n *\r\n * @param value Value\r\n * @param minValue Lowest possible value\r\n * @param maxValue Highest possible value\r\n * @return Adjusted value\r\n */\r\nexport function fitToRange(value, minValue, maxValue) {\r\n if ($type.isNumber(minValue)) {\r\n if ($type.isNumber(maxValue) && maxValue < minValue) {\r\n var temp = maxValue;\r\n maxValue = minValue;\r\n minValue = temp;\r\n }\r\n if (value < minValue) {\r\n value = minValue;\r\n }\r\n }\r\n if ($type.isNumber(maxValue)) {\r\n if (value > maxValue) {\r\n value = maxValue;\r\n }\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns sine of a number.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function sin(value) {\r\n return round(Math.sin(RADIANS * value), 10);\r\n}\r\n/**\r\n * Returns tan of a number.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function tan(value) {\r\n return round(Math.tan(RADIANS * value), 10);\r\n}\r\n/**\r\n * Returns cosine of a number.\r\n *\r\n * @param value Value\r\n * @return Cosine\r\n */\r\nexport function cos(value) {\r\n return round(Math.cos(RADIANS * value), 10);\r\n}\r\nexport function max(left, right) {\r\n if ($type.isNumber(left)) {\r\n if ($type.isNumber(right)) {\r\n if (right > left) {\r\n return right;\r\n }\r\n else {\r\n return left;\r\n }\r\n }\r\n else {\r\n return left;\r\n }\r\n }\r\n else if ($type.isNumber(right)) {\r\n return right;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\nexport function min(left, right) {\r\n if ($type.isNumber(left)) {\r\n if ($type.isNumber(right)) {\r\n if (right < left) {\r\n return right;\r\n }\r\n else {\r\n return left;\r\n }\r\n }\r\n else {\r\n return left;\r\n }\r\n }\r\n else if ($type.isNumber(right)) {\r\n return right;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns the closest value from the array of values to the reference value.\r\n *\r\n * @param values Array of values\r\n * @param value Reference value\r\n * @return Closes value from the array\r\n */\r\nexport function closest(values, referenceValue) {\r\n return values.reduce(function (prev, curr) {\r\n return (Math.abs(curr - referenceValue) < Math.abs(prev - referenceValue) ? curr : prev);\r\n });\r\n}\r\n/**\r\n * Checks whether two ranges of values intersect.\r\n *\r\n * @param range1 Range 1\r\n * @param range2 Range 2\r\n * @return Any intersecting numbers?\r\n */\r\nexport function intersect(range1, range2) {\r\n var start1 = $type.getValue(range1.start);\r\n var start2 = $type.getValue(range2.start);\r\n var end1 = $type.getValue(range1.end);\r\n var end2 = $type.getValue(range2.end);\r\n return Math.max(start1, start2) <= Math.min(end1, end2);\r\n}\r\n/**\r\n * Inverts the range of values.\r\n *\r\n * @param range Range\r\n */\r\nexport function invertRange(range) {\r\n var start = $type.getValue(range.start);\r\n var end = $type.getValue(range.end);\r\n return { start: 1 - end, end: 1 - start };\r\n}\r\n/**\r\n * Returns an intersection range between two ranges of values.\r\n *\r\n * @param range1 Range 1\r\n * @param range2 Range 2\r\n * @return Intersecting value range\r\n */\r\nexport function intersection(range1, range2) {\r\n var start1 = $type.getValue(range1.start);\r\n var start2 = $type.getValue(range2.start);\r\n var end1 = $type.getValue(range1.end);\r\n var end2 = $type.getValue(range2.end);\r\n var startMax = Math.max(start1, start2);\r\n var endMin = Math.min(end1, end2);\r\n if (endMin < startMax) {\r\n return undefined;\r\n }\r\n else {\r\n return { start: startMax, end: endMin };\r\n }\r\n}\r\n/**\r\n * Returns pixel \"distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\r\nexport function getDistance(point1, point2) {\r\n if (!point1) {\r\n return 0;\r\n }\r\n if (!point2) {\r\n point2 = { x: 0, y: 0 };\r\n }\r\n return Math.sqrt(Math.pow(Math.abs(point1.x - point2.x), 2) + Math.pow(Math.abs(point1.y - point2.y), 2));\r\n}\r\n/**\r\n * Returns pixel \"horizontal distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\r\nexport function getHorizontalDistance(point1, point2) {\r\n if (!point1) {\r\n return 0;\r\n }\r\n if (!point2) {\r\n point2 = { x: 0, y: 0 };\r\n }\r\n return Math.abs(point1.x - point2.x);\r\n}\r\n/**\r\n * Returns pixel \"vertical distance\" between two points.\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Distance in relative pixels\r\n */\r\nexport function getVerticalDistance(point1, point2) {\r\n if (!point1) {\r\n return 0;\r\n }\r\n if (!point2) {\r\n point2 = { x: 0, y: 0 };\r\n }\r\n return Math.abs(point1.y - point2.y);\r\n}\r\n/**\r\n * Returns approximate pixel \"distance\" between two points of cubic curve\r\n *\r\n * If second point is not specified, distance from {x:0, y:0} point is\r\n * calculated.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @param controlPointA Control Point 1\r\n * @param controlPointB Control Point 2\r\n * @param stepCount number of steps (the more, the more accurate result)\r\n * @return Distance in relative pixels\r\n */\r\nexport function getCubicCurveDistance(point1, point2, controlPointA, controlPointB, stepCount) {\r\n if (!point1) {\r\n return 0;\r\n }\r\n if (!point2) {\r\n point2 = { x: 0, y: 0 };\r\n }\r\n var distance = 0;\r\n var prevPoint = point1;\r\n if (stepCount > 0) {\r\n for (var s = 0; s <= stepCount; s++) {\r\n var point = getPointOnCubicCurve(point1, point2, controlPointA, controlPointB, s / stepCount);\r\n distance += getDistance(prevPoint, point);\r\n prevPoint = point;\r\n }\r\n }\r\n return distance;\r\n}\r\n/**\r\n * Returns scale based on original and end position of the two points.\r\n *\r\n * @param point1 Current position of point 1\r\n * @param startPoint1 Start position of point 1\r\n * @param point2 Current position of point 1\r\n * @param startPoint2 Start position of point 2\r\n * @return Scale Calculated scale\r\n */\r\nexport function getScale(point1, startPoint1, point2, startPoint2) {\r\n var initialDistance = getDistance(startPoint1, startPoint2);\r\n var currentDistance = getDistance(point1, point2);\r\n return Math.abs(currentDistance / initialDistance);\r\n}\r\n/**\r\n * Returns an exact mid point between two points.\r\n *\r\n * @param point1 Position of point 1\r\n * @param point2 Position of point 2\r\n * @return Mid point Position of mid-point\r\n */\r\nexport function getMidPoint(point1, point2, position) {\r\n if (!$type.isNumber(position)) {\r\n position = 0.5;\r\n }\r\n return {\r\n \"x\": (point1.x + (point2.x - point1.x) * position),\r\n \"y\": (point1.y + (point2.y - point1.y) * position)\r\n };\r\n}\r\n/**\r\n * Returns difference in angles between starting and ending position of two\r\n * vectors.\r\n *\r\n * @param point1 Current position of point 1\r\n * @param startPoint1 Start position of point 1\r\n * @param point2 Current position of point 1\r\n * @param startPoint2 Start position of point 2\r\n * @return Angle difference in degrees\r\n */\r\nexport function getRotation(point1, startPoint1, point2, startPoint2) {\r\n // Get start and end angles\r\n var startAngle = getAngle(startPoint1, startPoint2);\r\n var angle = getAngle(point1, point2);\r\n // Calculate angle\r\n var diff = startAngle - angle;\r\n if (diff < 0) {\r\n diff += 360;\r\n }\r\n return diff;\r\n}\r\n/**\r\n * Calculates angle of the vector based on two or one point.\r\n *\r\n * @param point1 Point 1\r\n * @param point2 Point 2\r\n * @return Angle in degrees\r\n */\r\nexport function getAngle(point1, point2) {\r\n if (!point2) {\r\n point2 = { x: point1.x * 2, y: point1.y * 2 };\r\n }\r\n var diffX = point2.x - point1.x;\r\n var diffY = point2.y - point1.y;\r\n var angle = Math.atan2(diffY, diffX) * DEGREES;\r\n if (angle < 0) {\r\n angle += 360;\r\n }\r\n return normalizeAngle(angle);\r\n}\r\n/**\r\n * Returns the shift in coordinates of the center when item is rotated, moved\r\n * and scaled at the same time.\r\n *\r\n * @param center Current center\r\n * @param point1 Frst reference point\r\n * @param startPoint1 Original position of the first reference point\r\n * @param point2 Second reference point\r\n * @param startPoint2 Original position of the first reference point\r\n * @return Shift in center point coordinates\r\n */\r\nexport function getCenterShift(center, point1, startPoint1, point2, startPoint2) {\r\n // Get angle\r\n var angle = getRotation(point1, startPoint1, point2, startPoint2) - 90;\r\n if (angle < 0) {\r\n angle += 360;\r\n }\r\n // Get distance between new position\r\n var distance = getDistance(point1, point2);\r\n // Calculate new X\r\n var x = Math.cos(angle) / distance + point1.x;\r\n var y = Math.cos(angle) / distance + point1.y;\r\n var shift = {\r\n \"x\": x - center.x,\r\n \"y\": y - center.y\r\n };\r\n return shift;\r\n}\r\n/**\r\n * Converts an array of points into a bounding box rectangle.\r\n *\r\n * Array can contain any number of points.\r\n *\r\n * @param points Points\r\n * @return Bounding box rectangle\r\n */\r\nexport function getBBox(points) {\r\n if (points) {\r\n var length_1 = points.length;\r\n if (length_1 !== 0) {\r\n var left = void 0;\r\n var right = void 0;\r\n var top_1;\r\n var bottom = void 0;\r\n for (var i = 0; i < length_1; i++) {\r\n var point = points[i];\r\n if (!$type.isNumber(right) || (point.x > right)) {\r\n right = point.x;\r\n }\r\n if (!$type.isNumber(left) || (point.x < left)) {\r\n left = point.x;\r\n }\r\n if (!$type.isNumber(top_1) || (point.y < top_1)) {\r\n top_1 = point.y;\r\n }\r\n if (!$type.isNumber(bottom) || (point.y > bottom)) {\r\n bottom = point.y;\r\n }\r\n }\r\n return { x: left, y: top_1, width: right - left, height: bottom - top_1 };\r\n }\r\n }\r\n return { x: 0, y: 0, width: 0, height: 0 };\r\n}\r\n/**\r\n * Returns a [[IRectangle]] object representing a common rectangle that fits\r\n * all passed in rectangles in it.\r\n *\r\n * @param rectangles An array of rectangles\r\n * @return Common rectangle\r\n */\r\nexport function getCommonRectangle(rectangles) {\r\n var length = rectangles.length;\r\n if (length !== 0) {\r\n var minX = void 0;\r\n var minY = void 0;\r\n var maxX = void 0;\r\n var maxY = void 0;\r\n for (var i = 0; i < length; i++) {\r\n var rectangle = rectangles[i];\r\n minX = min(rectangle.x, minX);\r\n minY = min(rectangle.y, minY);\r\n maxX = max(rectangle.x + rectangle.width, maxX);\r\n maxY = max(rectangle.y + rectangle.height, maxY);\r\n }\r\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\r\n }\r\n}\r\n/**\r\n * [getPointOnQuadraticCurve description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointA [description]\r\n * @param pointB [description]\r\n * @param controlPoint [description]\r\n * @param position [description]\r\n * @return [description]\r\n */\r\nexport function getPointOnQuadraticCurve(pointA, pointB, controlPoint, position) {\r\n var x = (1 - position) * (1 - position) * pointA.x + 2 * (1 - position) * position * controlPoint.x + position * position * pointB.x;\r\n var y = (1 - position) * (1 - position) * pointA.y + 2 * (1 - position) * position * controlPoint.y + position * position * pointB.y;\r\n return { x: x, y: y };\r\n}\r\n/**\r\n * [getPointOnCubicCurve description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointA [description]\r\n * @param pointB [description]\r\n * @param controlPointA [description]\r\n * @param controlPointB [description]\r\n * @param position [description]\r\n * @return [description]\r\n */\r\nexport function getPointOnCubicCurve(pointA, pointB, controlPointA, controlPointB, position) {\r\n var point = { x: 0, y: 0 };\r\n var mt1 = 1 - position;\r\n var mt2 = mt1 * mt1;\r\n var mt3 = mt2 * mt1;\r\n point.x = pointA.x * mt3 + controlPointA.x * 3 * mt2 * position + controlPointB.x * 3 * mt1 * position * position + pointB.x * position * position * position;\r\n point.y = pointA.y * mt3 + controlPointA.y * 3 * mt2 * position + controlPointB.y * 3 * mt1 * position * position + pointB.y * position * position * position;\r\n return point;\r\n}\r\n/**\r\n * [getCubicControlPointA description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\r\nexport function getCubicControlPointA(p0, p1, p2, p3, tensionX, tensionY) {\r\n tensionX = adjustTension(tensionX);\r\n tensionY = adjustTension(tensionY);\r\n return { x: ((-p0.x + p1.x / tensionX + p2.x) * tensionX), y: ((-p0.y + p1.y / tensionY + p2.y) * tensionY) };\r\n}\r\n/**\r\n * [getCubicControlPointB description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\r\nexport function getCubicControlPointB(p0, p1, p2, p3, tensionX, tensionY) {\r\n tensionX = adjustTension(tensionX);\r\n tensionY = adjustTension(tensionY);\r\n return { x: ((p1.x + p2.x / tensionX - p3.x) * tensionX), y: ((p1.y + p2.y / tensionY - p3.y) * tensionY) };\r\n}\r\n/**\r\n * [adjustTension description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param tension [description]\r\n * @return [description]\r\n */\r\nexport function adjustTension(tension) {\r\n return 1 - tension + 0.00001;\r\n}\r\n/**\r\n * [normalizeAngle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n * @return [description]\r\n */\r\nexport function normalizeAngle(value) {\r\n if (value == 360) {\r\n return 360;\r\n }\r\n return value % 360;\r\n}\r\n/**\r\n * [normalizeAngleToRange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @todo review this with various angles, can be tested on radar chart with custom start/end angles\r\n * @param value [description]\r\n * @param startAngle [description]\r\n * @param endAngle [description]\r\n * @return [description]\r\n */\r\nexport function fitAngleToRange(value, startAngle, endAngle) {\r\n if (startAngle > endAngle) {\r\n var temp = startAngle;\r\n startAngle = endAngle;\r\n endAngle = temp;\r\n }\r\n value = normalizeAngle(value);\r\n var count = (startAngle - normalizeAngle(startAngle)) / 360;\r\n if (value < startAngle) {\r\n value += 360 * (count + 1);\r\n }\r\n var maxEnd = startAngle + (endAngle - startAngle) / 2 + 180;\r\n var maxStart = startAngle + (endAngle - startAngle) / 2 - 180;\r\n if (value > endAngle) {\r\n if (value - 360 > startAngle) {\r\n value -= 360;\r\n }\r\n else {\r\n if (value < maxEnd) {\r\n value = endAngle;\r\n }\r\n else {\r\n value = startAngle;\r\n }\r\n }\r\n }\r\n if (value < startAngle) {\r\n if (value > maxStart) {\r\n value = startAngle;\r\n }\r\n else {\r\n value = endAngle;\r\n }\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns [[IRectangle]] of an arc in relative values, assuming that the\r\n * center is at the circle center.\r\n *\r\n * Used to find out max radius of an arc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param startAngle Start angle\r\n * @param endAngle End angle\r\n * @param radius \t Relative radius\r\n * @return Rectangle\r\n */\r\nexport function getArcRect(startAngle, endAngle, radius) {\r\n var minX = Number.MAX_VALUE;\r\n var minY = Number.MAX_VALUE;\r\n var maxX = -Number.MAX_VALUE;\r\n var maxY = -Number.MAX_VALUE;\r\n var bpoints = [];\r\n if (!$type.isNumber(radius)) {\r\n radius = 1;\r\n }\r\n bpoints.push(getArcPoint(radius, startAngle));\r\n bpoints.push(getArcPoint(radius, endAngle));\r\n var fromAngle = Math.min(Math.floor(startAngle / 90) * 90, Math.floor(endAngle / 90) * 90);\r\n var toAngle = Math.max(Math.ceil(startAngle / 90) * 90, Math.ceil(endAngle / 90) * 90);\r\n for (var angle = fromAngle; angle <= toAngle; angle += 90) {\r\n if (angle >= startAngle && angle <= endAngle) {\r\n bpoints.push(getArcPoint(radius, angle));\r\n }\r\n }\r\n for (var i = 0; i < bpoints.length; i++) {\r\n var pt = bpoints[i];\r\n if (pt.x < minX) {\r\n minX = pt.x;\r\n }\r\n if (pt.y < minY) {\r\n minY = pt.y;\r\n }\r\n if (pt.x > maxX) {\r\n maxX = pt.x;\r\n }\r\n if (pt.y > maxY) {\r\n maxY = pt.y;\r\n }\r\n }\r\n return ({ x: minX, y: minY, width: maxX - minX, height: maxY - minY });\r\n}\r\n/**\r\n * Returns point on arc\r\n *\r\n * @param center point\r\n * @param radius\r\n * @param arc\r\n * @return {boolean}\r\n */\r\nexport function getArcPoint(radius, arc) {\r\n return ({ x: radius * cos(arc), y: radius * sin(arc) });\r\n}\r\n/**\r\n * Returns true if a point is within rectangle\r\n *\r\n * @param point\r\n * @param rectangle\r\n * @return {boolean}\r\n */\r\nexport function isInRectangle(point, rectangle) {\r\n if (point.x >= rectangle.x && point.x <= rectangle.x + rectangle.width && point.y >= rectangle.y && point.y <= rectangle.y + rectangle.height) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport function getLineIntersection(pointA1, pointA2, pointB1, pointB2) {\r\n var x = ((pointA1.x * pointA2.y - pointA2.x * pointA1.y) * (pointB1.x - pointB2.x) - (pointA1.x - pointA2.x) * (pointB1.x * pointB2.y - pointB1.y * pointB2.x)) / ((pointA1.x - pointA2.x) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x - pointB2.x));\r\n var y = ((pointA1.x * pointA2.y - pointA2.x * pointA1.y) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x * pointB2.y - pointB1.y * pointB2.x)) / ((pointA1.x - pointA2.x) * (pointB1.y - pointB2.y) - (pointA1.y - pointA2.y) * (pointB1.x - pointB2.x));\r\n return { x: x, y: y };\r\n}\r\n//# sourceMappingURL=Math.js.map","/**\r\n * Morpher module contains functionality that allows morphing one polygon to\r\n * another.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { Animation, AnimationDisposer } from \"../utils/Animation\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $ease from \"../utils/Ease\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * Morpher can be used to morph one polygon to some other polygon.\r\n */\r\nvar Morpher = /** @class */ (function (_super) {\r\n __extends(Morpher, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param morphable An object to morph\r\n */\r\n function Morpher(morphable) {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A storage for measurements.\r\n */\r\n _this._bboxes = [];\r\n /**\r\n * Duration of the morphing animation in milliseconds.\r\n */\r\n _this.morphDuration = 800;\r\n /**\r\n * An easing function to use for morphing animation.\r\n *\r\n * @see {@link Ease}\r\n */\r\n _this.morphEasing = $ease.cubicOut;\r\n /**\r\n * If set to `true`, all separate parts of the multi-part polygon will\r\n * morph into a single circle or polygon when using built-in methods\r\n * `morphToCircle()` or `morphToPolygon()`.\r\n *\r\n * Otherwise each separate part of polygon will morph to individual target\r\n * circle or polgyon.\r\n */\r\n _this.morphToSingle = true;\r\n /**\r\n * A ratio to scale morphed object in relation to the source object.\r\n */\r\n _this.scaleRatio = 1;\r\n _this.className = \"Morpher\";\r\n _this.morphable = morphable;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Morphs a polygon to another polygon.\r\n *\r\n * @param toPoints Corner points of the target shape\r\n * @param duration Duration in milliseconds\r\n * @param easing Easing function\r\n * @return Animation\r\n */\r\n Morpher.prototype.morphToPolygon = function (toPoints, duration, easing) {\r\n var points = this.morphable.currentPoints;\r\n if (points && toPoints) {\r\n this.sortPoints(points);\r\n this.sortPoints(toPoints);\r\n this._morphFromPointsReal = [];\r\n this._morphToPointsReal = [];\r\n if (!$type.hasValue(duration)) {\r\n duration = this.morphDuration;\r\n }\r\n if (!$type.hasValue(easing)) {\r\n easing = this.morphEasing;\r\n }\r\n this._morphFromPointsReal = this.normalizePoints(toPoints, points);\r\n this._morphToPointsReal = this.normalizePoints(points, toPoints);\r\n this.morphable.currentPoints = this._morphFromPointsReal;\r\n var animation = new Animation(this, { property: \"morphProgress\", from: 0, to: 1 }, duration, easing);\r\n this._disposers.push(animation);\r\n animation.start();\r\n return animation;\r\n }\r\n };\r\n /**\r\n * [normalizePoints description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointsA Point A\r\n * @param pointsB Point B\r\n * @return Normalized points\r\n */\r\n Morpher.prototype.normalizePoints = function (pointsA, pointsB) {\r\n for (var i = 0, len = pointsA.length; i < len; i++) {\r\n var surfaceA = pointsA[i][0];\r\n var holeA = pointsA[i][1];\r\n var bboxA = $type.getValue($math.getBBox(surfaceA));\r\n var middleX = bboxA.x + bboxA.width;\r\n var middleY = bboxA.y + bboxA.height;\r\n // check if we have the same in PointsB\r\n if (!pointsB[i]) {\r\n pointsB[i] = [];\r\n }\r\n // check if we have surface in pointsB\r\n if (surfaceA && !pointsB[i][0]) {\r\n pointsB[i][0] = [{ x: middleX, y: middleY }, { x: middleX, y: middleY }];\r\n }\r\n if (pointsB[i][0]) {\r\n pointsB[i][0] = this.addPoints(pointsB[i][0], surfaceA.length);\r\n var distance = Infinity;\r\n var splitAt = 0;\r\n for (var a = 0; a < pointsB[i][0].length; a++) {\r\n var newDistance = $math.getDistance(pointsB[i][0][a], surfaceA[0]);\r\n if (newDistance < distance) {\r\n splitAt = a;\r\n distance = newDistance;\r\n }\r\n }\r\n var partA = pointsB[i][0].slice(0, splitAt);\r\n var partB = pointsB[i][0].slice(splitAt);\r\n pointsB[i][0] = partB.concat(partA);\r\n }\r\n if (holeA) {\r\n if (!pointsB[i][1]) {\r\n pointsB[i][1] = [{ x: middleX, y: middleY }, { x: middleX, y: middleY }];\r\n }\r\n pointsB[i][1] = this.addPoints(pointsB[i][1], holeA.length);\r\n }\r\n }\r\n return pointsB;\r\n };\r\n /**\r\n * [sortPoints description]\r\n *\r\n * @ignore Exclude from doc\r\n * @todo Description\r\n * @param points [description]\r\n * @return common bbox of points\r\n */\r\n Morpher.prototype.sortPoints = function (points) {\r\n points.sort(function (a, b) {\r\n var bbox1 = $type.getValue($math.getBBox(a[0]));\r\n var bbox2 = $type.getValue($math.getBBox(b[0]));\r\n if (bbox1.width * bbox1.height > bbox2.width * bbox2.height) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n });\r\n var bboxes = [];\r\n for (var i = 0, len = points.length; i < len; i++) {\r\n var surface = points[i][0];\r\n if (surface) {\r\n bboxes.push($type.getValue($math.getBBox(surface)));\r\n }\r\n }\r\n return $math.getCommonRectangle(bboxes);\r\n };\r\n /**\r\n * Morphs polygon to a circle (it is actually a polygon which makes a circle).\r\n *\r\n * @param radius Target circle radius (px)\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\r\n Morpher.prototype.morphToCircle = function (radius, duration, easing) {\r\n var points = this.morphable.points;\r\n var commonBBox = this.sortPoints(points);\r\n this._morphFromPointsReal = [];\r\n this._morphToPointsReal = [];\r\n if (!$type.hasValue(duration)) {\r\n duration = this.morphDuration;\r\n }\r\n if (!$type.hasValue(easing)) {\r\n easing = this.morphEasing;\r\n }\r\n // surface\r\n for (var i = 0, len = points.length; i < len; i++) {\r\n var surface = points[i][0];\r\n var hole = points[i][1];\r\n this._morphFromPointsReal[i] = [];\r\n this._morphToPointsReal[i] = [];\r\n if (surface) {\r\n var toPoints = surface;\r\n var fromPoints = surface;\r\n var bbox = $type.getValue($math.getBBox(fromPoints)); // this._bboxes[i];\r\n if (this.morphToSingle) {\r\n bbox = $type.getValue(commonBBox);\r\n }\r\n var middleX = bbox.x + bbox.width / 2;\r\n var middleY = bbox.y + bbox.height / 2;\r\n var realRadius = radius;\r\n if (!$type.isNumber(realRadius)) {\r\n realRadius = Math.min(bbox.width / 2, bbox.height / 2);\r\n }\r\n toPoints = [];\r\n // find angle for the first point\r\n var startAngle = $math.getAngle({ x: middleX, y: middleY }, surface[0]);\r\n var count = 100;\r\n if (surface.length > count) {\r\n count = surface.length;\r\n }\r\n fromPoints = this.addPoints(surface, count);\r\n count = fromPoints.length; // add Points might increase number a bit\r\n var angle = 360 / (count - 1);\r\n for (var a = 0; a < count; a++) {\r\n var realAngle = angle * a + startAngle;\r\n var pointOnCircle = { x: middleX + realRadius * $math.cos(realAngle), y: middleY + realRadius * $math.sin(realAngle) };\r\n toPoints[a] = pointOnCircle;\r\n }\r\n if (hole && hole.length > 0) {\r\n for (var i_1 = 0, hlen = hole.length; i_1 < hlen; i_1++) {\r\n toPoints.push({ x: middleX, y: middleY });\r\n }\r\n }\r\n this._morphFromPointsReal[i][0] = fromPoints;\r\n this._morphToPointsReal[i][0] = toPoints;\r\n }\r\n }\r\n this.morphable.currentPoints = this._morphFromPointsReal;\r\n var animation = new Animation(this, { property: \"morphProgress\", from: 0, to: 1 }, duration, easing);\r\n this._disposers.push(animation);\r\n animation.start();\r\n return animation;\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @ignore Exclude from doc\r\n * @todo Description\r\n * @param points [description]\r\n * @param mustHaveCount [description]\r\n * @return [description]\r\n */\r\n Morpher.prototype.addPoints = function (points, mustHaveCount) {\r\n var addToSegmentCount = Math.round(mustHaveCount / points.length);\r\n var newPoints = [];\r\n for (var i = 0, len = points.length; i < len; i++) {\r\n var point0 = points[i];\r\n var point1 = void 0;\r\n if (i == points.length - 1) {\r\n point1 = points[0];\r\n }\r\n else {\r\n point1 = points[i + 1];\r\n }\r\n newPoints.push(point0);\r\n for (var p = 1; p < addToSegmentCount; p++) {\r\n var percent = p / addToSegmentCount;\r\n var extraPoint = { x: point0.x + (point1.x - point0.x) * percent, y: point0.y + (point1.y - point0.y) * percent };\r\n newPoints.push(extraPoint);\r\n }\r\n // stop adding in case we already added more than left in original\r\n if (newPoints.length + points.length - i == mustHaveCount) {\r\n addToSegmentCount = 0;\r\n }\r\n }\r\n if (newPoints.length < mustHaveCount && points.length > 0) {\r\n var lastPoint = points[points.length - 1];\r\n for (var p = newPoints.length; p < mustHaveCount; p++) {\r\n // add same as last\r\n newPoints.push({ x: lastPoint.x, y: lastPoint.y });\r\n }\r\n }\r\n return newPoints;\r\n };\r\n /**\r\n * Morphs polygon into a rectangular polygon.\r\n *\r\n * @param width Width of the target rectangle (px)\r\n * @param height Height of the target rectangle (px)\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\r\n Morpher.prototype.morphToRectangle = function (width, height, duration, easing) {\r\n var points = this.morphable.points;\r\n this.sortPoints(points);\r\n this._morphFromPointsReal = [];\r\n this._morphToPointsReal = [];\r\n if (!$type.hasValue(duration)) {\r\n duration = this.morphDuration;\r\n }\r\n if (!$type.hasValue(easing)) {\r\n easing = this.morphEasing;\r\n }\r\n //\t\tlet biggestBBox: IRectangle = this._bboxes[this._biggestIndex];\r\n // surface\r\n for (var i = 0, len = points.length; i < len; i++) {\r\n var surface = points[i][0];\r\n var hole = points[i][1];\r\n this._morphFromPointsReal[i] = [];\r\n this._morphToPointsReal[i] = [];\r\n if (surface) {\r\n var toPoints = surface;\r\n var fromPoints = surface;\r\n var bbox = this._bboxes[i];\r\n // we only work with first area. TODO: maybe we should find the biggest one?\r\n if (this.morphToSingle) {\r\n //if (i != this._biggestIndex) {\r\n //\tbbox = { x: biggestBBox.x + biggestBBox.width / 2, y: biggestBBox.y + biggestBBox.height / 2, width: 0, height: 0 };\r\n //}\r\n }\r\n var x = bbox.x;\r\n var y = bbox.y;\r\n var realWidth = width;\r\n var realHeight = height;\r\n if (!$type.isNumber(realWidth)) {\r\n realWidth = bbox.width;\r\n }\r\n if (!$type.isNumber(realHeight)) {\r\n realHeight = bbox.height;\r\n }\r\n toPoints = [{ x: x, y: y }, { x: x + realWidth, y: y }, { x: x + realWidth, y: y + realHeight }, { x: x, y: y + realHeight }];\r\n toPoints = this.addPoints(toPoints, surface.length);\r\n // if polygon has less points then count, add\r\n if (surface.length < 4) {\r\n for (var i_2 = surface.length; i_2 < 4; i_2++) {\r\n toPoints.push({ x: surface[i_2].x, y: surface[i_2].y });\r\n }\r\n }\r\n if (hole && hole.length > 0) {\r\n var middleX = bbox.x + bbox.width / 2;\r\n var middleY = bbox.y + bbox.height / 2;\r\n for (var i_3 = 0, hlen = hole.length; i_3 < hlen; i_3++) {\r\n toPoints.push({ x: middleX, y: middleY });\r\n }\r\n }\r\n this._morphFromPointsReal[i][0] = fromPoints;\r\n this._morphToPointsReal[i][0] = toPoints;\r\n }\r\n }\r\n this.morphable.currentPoints = this._morphFromPointsReal;\r\n var animation = new Animation(this, { property: \"morphProgress\", from: 0, to: 1 }, duration, easing);\r\n this._disposers.push(animation);\r\n animation.start();\r\n return animation;\r\n };\r\n Object.defineProperty(Morpher.prototype, \"morphProgress\", {\r\n /**\r\n * Returns the progress of morph transition.\r\n *\r\n * @return Progress (0-1)\r\n */\r\n get: function () {\r\n return this._morphProgress;\r\n },\r\n /**\r\n * Progress of the morph transition.\r\n *\r\n * Setting this will also trigger actual transformation.\r\n *\r\n * @param value Progress (0-1)\r\n */\r\n set: function (value) {\r\n this._morphProgress = value;\r\n var currentPoints = [];\r\n if (value != null) {\r\n var fromPoints = this._morphFromPointsReal;\r\n var toPoints = this._morphToPointsReal;\r\n if (fromPoints != null && toPoints != null) {\r\n for (var i = 0, len = fromPoints.length; i < len; i++) {\r\n var currentArea = [];\r\n currentPoints.push(currentArea);\r\n var surfaceFrom = fromPoints[i][0];\r\n var holeFrom = fromPoints[i][1];\r\n var surfaceTo = toPoints[i][0];\r\n var holeTo = toPoints[i][1];\r\n if (surfaceFrom && surfaceFrom.length > 0 && surfaceTo && surfaceTo.length > 0) {\r\n var currentSurface = [];\r\n for (var i_4 = 0, slen = surfaceFrom.length; i_4 < slen; i_4++) {\r\n var point0 = surfaceFrom[i_4];\r\n var point1 = surfaceTo[i_4];\r\n var currentPoint = { x: point0.x + (point1.x * this.scaleRatio - point0.x) * value, y: point0.y + (point1.y * this.scaleRatio - point0.y) * value };\r\n currentSurface.push(currentPoint);\r\n }\r\n currentArea[0] = currentSurface;\r\n }\r\n if (holeFrom && holeFrom.length > 0 && holeTo && holeTo.length > 0) {\r\n var currentHole = [];\r\n for (var i_5 = 0, hlen = holeFrom.length; i_5 < hlen; i_5++) {\r\n var point0 = holeFrom[i_5];\r\n var point1 = holeTo[i_5];\r\n var currentPoint = { x: point0.x + (point1.x * this.scaleRatio - point0.x) * value, y: point0.y + (point1.y * this.scaleRatio - point0.y) * value };\r\n currentHole.push(currentPoint);\r\n }\r\n currentArea[1] = currentHole;\r\n }\r\n }\r\n }\r\n }\r\n this.morphable.currentPoints = currentPoints;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Restores the polygon to its original appearance.\r\n *\r\n * @param duration Duration (ms)\r\n * @param easing Easing function\r\n * @return Animation\r\n */\r\n Morpher.prototype.morphBack = function (duration, easing) {\r\n this._morphToPointsReal = this._morphFromPointsReal;\r\n this._morphFromPointsReal = this.morphable.currentPoints;\r\n if (!$type.hasValue(duration)) {\r\n duration = this.morphDuration;\r\n }\r\n if (!$type.hasValue(easing)) {\r\n easing = this.morphEasing;\r\n }\r\n var animation = new Animation(this, { property: \"morphProgress\", from: 0, to: 1 }, duration, easing);\r\n this._disposers.push(animation);\r\n animation.start();\r\n return animation;\r\n };\r\n Object.defineProperty(Morpher.prototype, \"animations\", {\r\n /**\r\n * Returns a list of morph animations currently being played.\r\n *\r\n * @return List of animations\r\n */\r\n get: function () {\r\n if (!this._animations) {\r\n this._animations = [];\r\n this._disposers.push(new AnimationDisposer(this._animations));\r\n }\r\n return this._animations;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Morpher;\r\n}(BaseObject));\r\nexport { Morpher };\r\n//# sourceMappingURL=Morpher.js.map","/**\r\n * A collection of network-related functions\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Loads an external file via its URL.\r\n *\r\n * Please note that this is an asynchronous function.\r\n *\r\n * It will not return the result, but rather a `Promise`.\r\n *\r\n * You can use the `await` notion, or `then()`.\r\n *\r\n * ```TypeScript\r\n * // Using await\r\n * let response = await Net.load( \"http://www.my.com/data.json\" );\r\n * console.log( response.response );\r\n *\r\n * // Using then()\r\n * Net.load( \"http://www.my.com/data.json\" ).then( ( response ) => {\r\n * console.log( response.response );\r\n * } );\r\n * ```\r\n * ```JavaScript\r\n * // Using then()\r\n * Net.load( \"http://www.my.com/data.json\" ).then( function( response ) {\r\n * console.log( response.response );\r\n * } );\r\n * ```\r\n *\r\n * @async\r\n * @param url URL for the file to load\r\n * @param target A target element that is requesting the net load\r\n * @param options Request options\r\n * @return Result (Promise)\r\n */\r\nexport function load(url, target, options) {\r\n return new Promise(function (success, error) {\r\n // Is return type Blob?\r\n var isBlob = $type.hasValue(options) && options.responseType == \"blob\";\r\n // Create request and set up handlers\r\n var xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n var response = void 0;\r\n var blob_1;\r\n if (isBlob) {\r\n blob_1 = xhr.response;\r\n readBlob(blob_1).then(function (response) {\r\n var output = {\r\n xhr: xhr,\r\n error: false,\r\n response: response,\r\n blob: blob_1,\r\n type: xhr.getResponseHeader(\"Content-Type\"),\r\n target: target\r\n };\r\n success(output);\r\n });\r\n return;\r\n }\r\n else {\r\n response = xhr.responseText || xhr.response;\r\n }\r\n var output = {\r\n xhr: xhr,\r\n error: false,\r\n response: response,\r\n blob: blob_1,\r\n type: xhr.getResponseHeader(\"Content-Type\"),\r\n target: target\r\n };\r\n success(output);\r\n }\r\n else {\r\n error({\r\n xhr: xhr,\r\n error: true,\r\n type: xhr.getResponseHeader(\"Content-Type\"),\r\n target: target\r\n });\r\n }\r\n };\r\n xhr.onerror = function () {\r\n error({\r\n xhr: xhr,\r\n error: true,\r\n type: xhr.getResponseHeader(\"Content-Type\"),\r\n target: target\r\n });\r\n };\r\n // Open request\r\n xhr.open(\"GET\", url, true);\r\n if (options && options.withCredentials) {\r\n xhr.withCredentials = true;\r\n }\r\n // Process options\r\n if ($type.hasValue(options)) {\r\n if ($type.hasValue(options.requestHeaders)) {\r\n for (var i = 0; i < options.requestHeaders.length; i++) {\r\n var header = options.requestHeaders[i];\r\n xhr.setRequestHeader(header.key, header.value);\r\n }\r\n }\r\n if ($type.hasValue(options.responseType)) {\r\n xhr.responseType = options.responseType;\r\n }\r\n }\r\n // Send request\r\n xhr.send();\r\n });\r\n}\r\n/**\r\n * Returns textual representation of a Blob object.\r\n *\r\n * @param blob Target blob\r\n * @return Text promise\r\n */\r\nexport function readBlob(blob) {\r\n return new Promise(function (success, error) {\r\n var reader = new FileReader();\r\n reader.onload = function (event) {\r\n success(reader.result);\r\n };\r\n reader.onerror = function (e) {\r\n error(e);\r\n };\r\n reader.readAsText(blob);\r\n });\r\n}\r\n//# sourceMappingURL=Net.js.map","/**\r\n * ============================================================================\r\n * COMPARING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Comparing function used for ordering.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Number 1\r\n * @param b Number 2\r\n * @return Result\r\n */\r\nexport function order(a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n//# sourceMappingURL=Number.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns an iterator for all entries in object.\r\n *\r\n * Can be used to safely iterate through all properties of the object.\r\n *\r\n * @param object Source object\r\n * @returns Iterator\r\n */\r\nexport function entries(object) {\r\n return function (push) {\r\n // TODO make this more efficient ?\r\n for (var key in object) {\r\n if (hasKey(object, key)) {\r\n if (!push([key, object[key]])) {\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * Returns an array of object's property names.\r\n *\r\n * @param object Source object\r\n * @returns Object property names\r\n */\r\nexport function keys(object) {\r\n var output = [];\r\n for (var key in object) {\r\n if (hasKey(object, key)) {\r\n output.push(key);\r\n }\r\n }\r\n return output;\r\n}\r\n/**\r\n * Returns an array of object's property names ordered using specific ordering\r\n * function.\r\n *\r\n * @param object Source object\r\n * @param order Ordering function\r\n * @returns Object property names\r\n */\r\nexport function keysOrdered(object, order) {\r\n return keys(object).sort(order);\r\n}\r\n/**\r\n * Checks if `object` has a specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Has key?\r\n */\r\nexport function hasKey(object, key) {\r\n return {}.hasOwnProperty.call(object, key);\r\n}\r\n/**\r\n * Returns value of the specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Key value\r\n */\r\nexport function getKey(object, key) {\r\n return object[key];\r\n}\r\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * If return value of the function evaluates to `false` further iteration is\r\n * cancelled.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(object, fn) {\r\n for (var key in object) {\r\n if (hasKey(object, key)) {\r\n if (!fn(key, object[key])) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\r\nexport function each(object, fn) {\r\n eachContinue(object, function (key, value) {\r\n fn(key, value);\r\n return true;\r\n });\r\n}\r\n/**\r\n * Orders object properties using custom `ord` function and iterates through\r\n * them calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n * @param order Ordering function\r\n */\r\nexport function eachOrdered(object, fn, ord) {\r\n $array.each(keysOrdered(object, ord), function (key) {\r\n fn(key, object[key]);\r\n });\r\n}\r\n/**\r\n * Returns a copy of the object.\r\n *\r\n * @param object Source object\r\n * @returns Copy of the object\r\n */\r\nexport function copy(object) {\r\n return Object.assign({}, object);\r\n}\r\n/**\r\n * Merges two objects and returns a new object that contains properties from\r\n * both source objects.\r\n *\r\n * @param object1 Source object #1\r\n * @param object2 Source object #2\r\n * @returns Combined object\r\n */\r\nexport function merge(object1, object2) {\r\n return Object.assign({}, object1, object2);\r\n}\r\n/**\r\n * Returns object clone.\r\n *\r\n * @param object Source object\r\n * @returns Clone\r\n */\r\nexport function clone(object) {\r\n return JSON.parse(JSON.stringify(object));\r\n}\r\n/**\r\n * Copies a list of properties from one object to another.\r\n *\r\n * Will not copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\r\nexport function copyProperties(source, target, keys) {\r\n $array.each(keys, function (key) {\r\n if ($type.hasValue(source[key])) {\r\n target[key] = source[key];\r\n }\r\n });\r\n}\r\n/**\r\n * Copies a list of properties from one object to another only if target does't have value of the property set.\r\n *\r\n * Will not copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\r\nexport function softCopyProperties(source, target, keys) {\r\n $array.each(keys, function (key) {\r\n if ($type.hasValue(source[key]) && !($type.hasValue(target[key]))) {\r\n target[key] = source[key];\r\n }\r\n });\r\n}\r\n/**\r\n * Copies a list of properties from one object to another.\r\n *\r\n * Will copy empty properties.\r\n *\r\n * @param source Source object\r\n * @param target Target object\r\n * @param keys List of keys to copy\r\n */\r\nexport function forceCopyProperties(source, target, keys) {\r\n $array.each(keys, function (key) {\r\n target[key] = source[key];\r\n });\r\n}\r\n/**\r\n * Copies all properties from one object to another.\r\n *\r\n * @param from Source object\r\n * @param to Target object\r\n */\r\nexport function copyAllProperties(from, to) {\r\n copyProperties(from, to, keys(from));\r\n}\r\n//# sourceMappingURL=Object.js.map","/**\r\n * A collection of functions for ordering.\r\n */\r\n/**\r\n * [reverse description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param a [description]\r\n * @return [description]\r\n */\r\nexport function reverse(a) {\r\n switch (a) {\r\n case 0:\r\n return 0;\r\n case -1:\r\n return 1;\r\n case 1:\r\n return -1;\r\n }\r\n}\r\n/**\r\n * [or description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param a Item 1\r\n * @param b Item 2\r\n * @return [description]\r\n */\r\nexport function or(a, b) {\r\n if (a === 0) {\r\n return b;\r\n }\r\n else {\r\n return a;\r\n }\r\n}\r\n//# sourceMappingURL=Order.js.map","/**\r\n * This module contains PatternSet object definition\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { Color } from \"./Color\";\r\nimport { InterfaceColorSet } from \"./InterfaceColorSet\";\r\nimport { LinePattern } from \"../rendering/fills/LinePattern\";\r\nimport { RectPattern } from \"../rendering/fills/RectPattern\";\r\nimport { CirclePattern } from \"../rendering/fills/CirclePattern\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines an interable list of distinctive patterns that can be used in\r\n * conjunction to colors to generate various fill patterns.\r\n *\r\n * @important\r\n * @since 4.7.5\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/colors/} for color-related info\r\n */\r\nvar PatternSet = /** @class */ (function (_super) {\r\n __extends(PatternSet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PatternSet() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Holds the list of the colors in this set. (preset or auto-generated)\r\n */\r\n _this._list = [];\r\n /**\r\n * Current step.\r\n */\r\n _this._currentStep = 0;\r\n /**\r\n * If set to non-zero value, the PatternSet will start iterating patterns from\r\n * that particular index, not the first pattern in the list.\r\n */\r\n _this._startIndex = 0;\r\n /**\r\n * Current pass in cycle. Once all patterns in the list are iterated,\r\n * iteration restarts from beginning and currentPass is incremented.\r\n */\r\n _this._currentPass = 0;\r\n /**\r\n * A base color. If there are no colors pre-set in the color list, ColorSet\r\n * will use this color as a base when generating new ones, applying\r\n * `stepOptions` and `passOptions` to this base color.\r\n */\r\n _this.baseColor = new Color({\r\n r: 103,\r\n g: 183,\r\n b: 220\r\n });\r\n _this.className = \"PatternSet\";\r\n // Set base color to be used for pattern elements\r\n var interfaceColors = new InterfaceColorSet();\r\n // Set default patterns\r\n _this.list = [\r\n _this.getLinePattern(1000, 45, 1, 6),\r\n _this.getRectPattern(10, 0, 4),\r\n _this.getLinePattern(1000, -45, 1, 6),\r\n _this.getCirclePattern(11, 2, true),\r\n _this.getLinePattern(6, 90, 1),\r\n _this.getRectPattern(12, 45, 6, true),\r\n _this.getLinePattern(6, 0, 1),\r\n _this.getRectPattern(7, 0, 4),\r\n _this.getLinePattern(1000, 45, 2, 3, \"4,2\"),\r\n _this.getCirclePattern(9, 3, false),\r\n _this.getLinePattern(1000, -45, 2, 3, \"4,2\"),\r\n _this.getRectPattern(10, 45, Math.sqrt(50)),\r\n _this.getLinePattern(1000, -45, 2, 1),\r\n _this.getRectPattern(10, 0, 9),\r\n _this.getLinePattern(1000, 45, 2, 1),\r\n _this.getLinePattern(1000, 0, 3, 1),\r\n _this.getRectPattern(10, 45, 10),\r\n _this.getLinePattern(1000, 90, 3, 1)\r\n ];\r\n _this.baseColor = interfaceColors.getFor(\"stroke\");\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n PatternSet.prototype.getLinePattern = function (size, rotation, thickness, gap, strokeDashArray) {\r\n var pattern = new LinePattern();\r\n pattern.width = size;\r\n pattern.height = size;\r\n pattern.stroke = this.baseColor;\r\n pattern.gap = gap;\r\n pattern.strokeDasharray = strokeDashArray;\r\n pattern.strokeWidth = thickness;\r\n pattern.rotation = rotation;\r\n return pattern;\r\n };\r\n PatternSet.prototype.getRectPattern = function (size, rotation, thickness, outline) {\r\n var pattern = new RectPattern();\r\n pattern.width = size;\r\n pattern.height = size;\r\n pattern.rectWidth = thickness;\r\n pattern.rectHeight = thickness;\r\n if (outline) {\r\n pattern.stroke = this.baseColor;\r\n pattern.strokeWidth = 1;\r\n pattern.fillOpacity = 0;\r\n }\r\n else {\r\n pattern.fill = this.baseColor;\r\n pattern.strokeWidth = 0;\r\n }\r\n if (rotation != 0) {\r\n pattern.shapeRendering = \"auto\";\r\n }\r\n pattern.rotation = rotation;\r\n return pattern;\r\n };\r\n PatternSet.prototype.getCirclePattern = function (size, radius, outline) {\r\n var pattern = new CirclePattern();\r\n pattern.width = size;\r\n pattern.height = size;\r\n pattern.shapeRendering = \"auto\";\r\n pattern.radius = radius;\r\n if (outline) {\r\n pattern.stroke = this.baseColor;\r\n pattern.strokeWidth = 1;\r\n pattern.fillOpacity = 0;\r\n }\r\n else {\r\n pattern.fill = this.baseColor;\r\n pattern.strokeWidth = 0;\r\n }\r\n return pattern;\r\n };\r\n Object.defineProperty(PatternSet.prototype, \"list\", {\r\n /**\r\n * @return Pattern list\r\n */\r\n get: function () {\r\n return this._list;\r\n },\r\n /**\r\n * List of pre-defined patterns to be used in set.\r\n *\r\n * @param value Pattern list\r\n */\r\n set: function (value) {\r\n this._list = value;\r\n this.reset();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns the next pattern in list.\r\n *\r\n * @return Pattern\r\n */\r\n PatternSet.prototype.next = function () {\r\n var pattern = this.getIndex(this.currentStep);\r\n this._currentStep++;\r\n return pattern;\r\n };\r\n /**\r\n * Returns a color at specific index in the list.\r\n *\r\n * @param i Index\r\n * @return Pattern\r\n */\r\n PatternSet.prototype.getIndex = function (i) {\r\n var pattern;\r\n while (this.list.length <= i) {\r\n this.generatePatterns();\r\n }\r\n pattern = this.list[i];\r\n return pattern.clone();\r\n };\r\n /**\r\n * Generates a new set of patterns.\r\n */\r\n PatternSet.prototype.generatePatterns = function () {\r\n var count = this.list.length / (this._currentPass + 1);\r\n this._currentPass++;\r\n for (var i = 0; i < count; i++) {\r\n this.list.push(this.list[i].clone());\r\n }\r\n };\r\n /**\r\n * Resets internal iterator.\r\n *\r\n * Calling `next()` after this will return the very first color in the color\r\n * list, even if it was already returned before.\r\n */\r\n PatternSet.prototype.reset = function () {\r\n this._currentStep = this._startIndex;\r\n };\r\n Object.defineProperty(PatternSet.prototype, \"currentStep\", {\r\n /**\r\n * @return Step\r\n */\r\n get: function () {\r\n return this._currentStep;\r\n },\r\n /**\r\n * Sets current color iteration. You can use this property to skip some\r\n * colors from iteration. E.g. setting it to `10` will skip first ten\r\n * colors.\r\n *\r\n * Please note that the number is zero-based.\r\n *\r\n * @param value Step\r\n */\r\n set: function (value) {\r\n this._currentStep = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PatternSet.prototype, \"startIndex\", {\r\n /**\r\n * @return Index\r\n */\r\n get: function () {\r\n return this._startIndex;\r\n },\r\n /**\r\n * If set to non-zero value, the ColorSet will start iterating colors from\r\n * that particular index, not the first color in the list.\r\n *\r\n * @default 0\r\n * @param value Index\r\n */\r\n set: function (value) {\r\n this._startIndex = value;\r\n this.reset();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n PatternSet.prototype.processConfig = function (config) {\r\n // if (config) {\r\n // \t// Set up axis ranges\r\n // \tif ($type.hasValue(config.list) && $type.isArray(config.list)) {\r\n // \t\tfor (let i = 0, len = config.list.length; i < len; i++) {\r\n // \t\t\tif (!(config.list[i] instanceof Color)) {\r\n // \t\t\t\tconfig.list[i] = color(config.list[i]);\r\n // \t\t\t}\r\n // \t\t}\r\n // \t}\r\n // }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return PatternSet;\r\n}(BaseObject));\r\nexport { PatternSet };\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[\"PatternSet\"] = PatternSet;\r\n//# sourceMappingURL=PatternSet.js.map","/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a relative value (percent).\r\n *\r\n * The Percent object, can be instantiated using two ways:\r\n *\r\n * * Via `new Percent(X)`.\r\n * * Via `am4core.percent(X)`.\r\n *\r\n * `Percent` type objects can be used in a number of dual-measuring or\r\n * positioning properties, like `width`. E.g.:\r\n *\r\n * ```TypeScript\r\n * chart.paddingRight = new Percent(10);\r\n * // or\r\n * chart.paddingRight = am4core.percent(10);\r\n * ```\r\n * ```JavaScript\r\n * chart.paddingRight = new Percent(10);\r\n * // or\r\n * chart.paddingRight = am4core.percent(10);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"paddingRight\": \"10%\"\r\n * }\r\n * ```\r\n */\r\nvar Percent = /** @class */ (function () {\r\n /**\r\n * Constructor.\r\n *\r\n * @param percent Percent value\r\n */\r\n function Percent(percent) {\r\n this._value = percent;\r\n }\r\n Object.defineProperty(Percent.prototype, \"value\", {\r\n /**\r\n * Relative value.\r\n *\r\n * E.g. 100% is 1, 50% is 0.5, etc.\r\n *\r\n * This is useful to apply transformations to other values. E.g.:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = new am4core.Percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = new am4core.Percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * Alternatively, you can use `am4core.percent()` helper function:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = am4core.percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = am4core.percent(50);\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * @readonly\r\n * @return Relative value\r\n */\r\n get: function () {\r\n return this._value / 100;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Percent.prototype, \"percent\", {\r\n /**\r\n * Value in percent.\r\n *\r\n * @return Percent\r\n */\r\n get: function () {\r\n return this._value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Percent.prototype.toString = function () {\r\n return \"\" + this._value + \"%\";\r\n };\r\n return Percent;\r\n}());\r\nexport { Percent };\r\n/**\r\n * Converts numeric percent value to a proper [[Percent]] object.\r\n *\r\n * ```TypeScript\r\n * pieSeries.radius = am4core.percent(80);\r\n * ```\r\n * ```JavaScript\r\n * pieSeries.radius = am4core.percent(80);\r\n * ```\r\n *\r\n * @param value Percent\r\n * @return Percent object\r\n */\r\nexport function percent(value) {\r\n return new Percent(value);\r\n}\r\n/**\r\n * Checks if value is a [[Percent]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Input value\r\n * @return Is percent?\r\n */\r\nexport function isPercent(value) {\r\n return value instanceof Percent;\r\n}\r\n//# sourceMappingURL=Percent.js.map","/**\r\n * A plugin base class.\r\n */\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This is a base class that provides core functionality for plugins.\r\n *\r\n * The easiest way to start off with a new plugin is to extend this class.\r\n *\r\n * It will provide all the mandatory functionality, such as disposers.\r\n *\r\n * @since 4.2.2\r\n */\r\nvar Plugin = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n */\r\n function Plugin() {\r\n /**\r\n * Is this object disposed?\r\n */\r\n this._disposed = false;\r\n /**\r\n * List of IDisposer which will be disposed when the BaseObject is disposed.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n this._disposers = [];\r\n // Nothing to do here\r\n }\r\n /**\r\n * Decorates series with required events and adapters used to hijack its\r\n * data.\r\n */\r\n Plugin.prototype.init = function () {\r\n // Does nothing\r\n // Override it\r\n };\r\n /**\r\n * Returns if this element is already disposed.\r\n *\r\n * @return Is disposed?\r\n */\r\n Plugin.prototype.isDisposed = function () {\r\n return this._disposed;\r\n };\r\n /**\r\n * Disposes this object and related stuff.\r\n */\r\n Plugin.prototype.dispose = function () {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n var a = this._disposers;\r\n this._disposers = null;\r\n while (a.length !== 0) {\r\n var disposer = a.shift();\r\n disposer.dispose();\r\n }\r\n }\r\n };\r\n return Plugin;\r\n}());\r\nexport { Plugin };\r\n//# sourceMappingURL=Plugin.js.map","import * as $array from \"./Array\";\r\nimport * as $log from \"./Log\";\r\nvar Native = /** @class */ (function () {\r\n function Native() {\r\n var _this = this;\r\n this._targets = [];\r\n this._observer = new ResizeObserver(function (entries) {\r\n $array.each(entries, function (entry) {\r\n $array.each(_this._targets, function (x) {\r\n if (x.target === entry.target) {\r\n x.callback();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n Native.prototype.addTarget = function (target, callback) {\r\n this._observer.observe(target, { box: \"content-box\" });\r\n this._targets.push({ target: target, callback: callback });\r\n };\r\n Native.prototype.removeTarget = function (target) {\r\n this._observer.unobserve(target);\r\n $array.keepIf(this._targets, function (x) {\r\n return x.target !== target;\r\n });\r\n };\r\n return Native;\r\n}());\r\nvar Raf = /** @class */ (function () {\r\n function Raf() {\r\n this._targets = [];\r\n }\r\n Raf.prototype.addTarget = function (target, callback) {\r\n var _this = this;\r\n if (this._targets.length === 0) {\r\n var lastTime_1 = null;\r\n var loop_1 = function () {\r\n var currentTime = Date.now();\r\n if (lastTime_1 === null || currentTime > (lastTime_1 + Raf.delay)) {\r\n lastTime_1 = currentTime;\r\n $array.each(_this._targets, function (x) {\r\n var newSize = x.target.getBoundingClientRect();\r\n if (newSize.width !== x.size.width || newSize.height !== x.size.height) {\r\n x.size = newSize;\r\n x.callback();\r\n }\r\n });\r\n }\r\n _this._timer = requestAnimationFrame(loop_1);\r\n };\r\n this._timer = requestAnimationFrame(loop_1);\r\n }\r\n var size = target.getBoundingClientRect();\r\n this._targets.push({ target: target, callback: callback, size: size });\r\n };\r\n Raf.prototype.removeTarget = function (target) {\r\n $array.keepIf(this._targets, function (x) {\r\n return x.target !== target;\r\n });\r\n if (this._targets.length === 0) {\r\n cancelAnimationFrame(this._timer);\r\n }\r\n };\r\n Raf.delay = 200;\r\n return Raf;\r\n}());\r\nvar observer = null;\r\nfunction makeSensor() {\r\n if (observer === null) {\r\n if (typeof ResizeObserver !== \"undefined\") {\r\n observer = new Native();\r\n }\r\n else {\r\n observer = new Raf();\r\n }\r\n }\r\n return observer;\r\n}\r\nvar ResizeSensor = /** @class */ (function () {\r\n function ResizeSensor(element, callback) {\r\n this._disposed = false;\r\n this._sensor = makeSensor();\r\n this._element = element;\r\n this._sensor.addTarget(element, callback);\r\n }\r\n ResizeSensor.prototype.isDisposed = function () {\r\n return this._disposed;\r\n };\r\n ResizeSensor.prototype.dispose = function () {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._sensor.removeTarget(this._element);\r\n }\r\n };\r\n Object.defineProperty(ResizeSensor.prototype, \"sensor\", {\r\n get: function () {\r\n return this._sensor;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Deprecated: do not use.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ResizeSensor.prototype.reset = function () {\r\n $log.warn(\"resizeSensor.reset() is no longer needed and can be removed\");\r\n };\r\n return ResizeSensor;\r\n}());\r\nexport { ResizeSensor };\r\n//# sourceMappingURL=ResizeSensor.js.map","/**\r\n * Responsive functionality module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { List } from \"../utils/List\";\r\nimport { Adapter } from \"../utils/Adapter\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $iter from \"../utils/Iterator\";\r\nimport * as $array from \"../utils/Array\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $object from \"../utils/Object\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Responsive is responsible for overriding certain properties when conditions\r\n * are met.\r\n *\r\n * This class is used to dynamically apply and change certain chart properties\r\n * based on the current values of properties.\r\n *\r\n * Mainly, this is used with [[Sprite]]'s dimensional properties, like\r\n * `pixelWidth` and `pixelHeight`. However, it can be used to dynamically\r\n * change any property, based on any other property's value.\r\n *\r\n * A default responsive rules are disabled.\r\n *\r\n * To enable, set `enabled = false`. E.g.:\r\n *\r\n * ```TypeScript\r\n * chart.responsive.enabled = true;\r\n * ```\r\n * ```JavaScript\r\n * chart.responsive.enabled = true;\r\n * ```\r\n *\r\n * @see {@link IResponsiveEvents} for a list of available events\r\n * @see {@link IResponsiveAdapters} for a list of available Adapters\r\n * @todo Add default rules\r\n * @todo Watch for rule modification\r\n * @important\r\n */\r\nvar Responsive = /** @class */ (function (_super) {\r\n __extends(Responsive, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Responsive() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Holds a list of responsive rules organized by object type.\r\n */\r\n _this._rules = new List();\r\n /**\r\n * Holds the list of the default responsive rules.\r\n * @deprecated\r\n */\r\n //protected _defaultRules = new List();\r\n /**\r\n * Holds the list of currently applied rules.\r\n */\r\n _this._appliedRules = {};\r\n /**\r\n * Used to keep track of objects that have rules applied at the moment.\r\n */\r\n _this._appliedTargets = [];\r\n /**\r\n * Use default rules in addition to the user-defined ones?\r\n */\r\n _this._useDefault = true;\r\n /**\r\n * Adapter.\r\n */\r\n _this.adapter = new Adapter(_this);\r\n /**\r\n * Indicates of responsive rules application is enabled.\r\n */\r\n _this._enabled = false;\r\n /**\r\n * Holds disposers for all events added by this class.\r\n */\r\n _this._responsiveDisposers = [];\r\n /**\r\n * Collection of objects and state ids that do not have any properties set.\r\n */\r\n _this._noStates = [];\r\n _this.className = \"Responsive\";\r\n // Set up rules list events\r\n _this.rules.events.on(\"inserted\", function () { _this.checkRules(); }, true);\r\n _this.rules.events.on(\"removed\", function () { _this.checkRules(); }, true);\r\n _this._disposers.push(_this.rules.events);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Responsive.prototype, \"component\", {\r\n /**\r\n * @return Target object\r\n */\r\n get: function () {\r\n return this._component;\r\n },\r\n /**\r\n * A target object that responsive rules will need to be applied to.\r\n *\r\n * @param value Target object\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n // Check if it's the same\r\n if (value == this._component) {\r\n return;\r\n }\r\n // Check if we already have a set up component and remove its events\r\n this.disposeResponsiveHandlers();\r\n // Set\r\n this._component = value;\r\n // Set up resize monitoring events\r\n this._responsiveDisposers.push($type.getValue(this.component).events.on(\"sizechanged\", function () { _this.checkRules(); }, this));\r\n this._responsiveDisposers.push($type.getValue(this.component).events.once(\"datavalidated\", function () {\r\n if (_this._component.isReady()) {\r\n _this.checkRules(true);\r\n }\r\n }, this));\r\n // Enable resoponsive\r\n this.enabled = true;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Responsive.prototype, \"enabled\", {\r\n /**\r\n * @return Apply responsive rules?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"enabled\", this._enabled);\r\n },\r\n /**\r\n * Should responsive rules be checked against and applied?\r\n *\r\n * @default false\r\n * @param value Apply responsive rules?\r\n */\r\n set: function (value) {\r\n if (this._enabled != value) {\r\n this._enabled = value;\r\n // Run `applyRules` so that any currently applied rules can be reset\r\n this.applyRules();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Responsive.prototype, \"useDefault\", {\r\n /**\r\n * @return Use default rules?\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"useDefault\", this._useDefault);\r\n },\r\n /**\r\n * Should default responsive rules be applied in addition to user-defined\r\n * ones.\r\n *\r\n * User-defined rules will take precedence over default rules whenever they\r\n * produce conflicting settings.\r\n *\r\n * @default true\r\n * @param value Use default rules?\r\n */\r\n set: function (value) {\r\n if (this._useDefault != value) {\r\n this._useDefault = value;\r\n // Run `applyRules` so that any currently applied rules can be reset\r\n this.applyRules();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Responsive.prototype, \"rules\", {\r\n /**\r\n * @return User-defined rules\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"rules\", this._rules);\r\n },\r\n /**\r\n * User-defined responsive rules.\r\n *\r\n * User-defined rules will take precedence over default rules whenever they\r\n * produce conflicting settings.\r\n *\r\n * Use `allRules` to get all applicable rules including default and\r\n * user-defined ones.\r\n *\r\n * @param value User-defined rules\r\n */\r\n set: function (value) {\r\n this._rules = value;\r\n this._enabled = true;\r\n this.applyRules();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Responsive.prototype, \"defaultRules\", {\r\n /**\r\n * Default responsive rules.\r\n *\r\n * @readonly\r\n * @return List of responsive rules\r\n */\r\n get: function () {\r\n return this.adapter.apply(\"defaultRules\", defaultRules);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Responsive.prototype, \"allRules\", {\r\n /**\r\n * Returns all rules: default rules (if not disabled) combined with\r\n * user-defined ones.\r\n *\r\n * @readonly\r\n * @return List of all applicable rules\r\n */\r\n get: function () {\r\n // Create empty list\r\n var rules = new List();\r\n // Add default rules if not disabled\r\n // A code, requesting `allRules` must ensure loading of default rules\r\n // by calling `loadDefaultRules()`\r\n if (this.useDefault) {\r\n rules.copyFrom(this.defaultRules);\r\n }\r\n // Add user-defined ones\r\n rules.copyFrom(this.rules);\r\n return this.adapter.apply(\"allRules\", rules);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Checks if rule by the particular id currently applied.\r\n *\r\n * @param ruleId Rule ID\r\n * @return Is currently applied?\r\n */\r\n Responsive.prototype.isApplied = function (ruleId) {\r\n var rule = this._appliedRules[ruleId];\r\n return $type.hasValue(rule) ? rule : false;\r\n };\r\n /**\r\n * Checks which responsive rules currently satisfy their conditions and\r\n * should be applied, or unapplied.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Responsive.prototype.checkRules = function (force) {\r\n var _this = this;\r\n if (force === void 0) { force = false; }\r\n // Check if there are any rules\r\n var rules = this.allRules;\r\n if (!rules || rules.length == 0) {\r\n return;\r\n }\r\n // Init a list of rules to be applied\r\n var rulesChanged = false;\r\n var component = $type.getValue(this.component);\r\n // Do not perform rule application of target has no size\r\n if (component.pixelWidth == 0 || component.pixelHeight == 0) {\r\n return;\r\n }\r\n // Check which rules match\r\n $iter.each(rules.iterator(), function (rule) {\r\n // Check if rule has an id\r\n if (!rule.id) {\r\n rule.id = registry.getUniqueId();\r\n }\r\n // Init indicator if this rule should be applied\r\n var apply = rule.relevant(component);\r\n // Let's check if this rule needs to be applied\r\n if ((apply && !_this.isApplied(rule.id)) || (!apply && _this.isApplied(rule.id))) {\r\n rulesChanged = true;\r\n }\r\n _this._appliedRules[rule.id] = apply;\r\n });\r\n if (force) {\r\n rulesChanged = true;\r\n }\r\n // Check if we need to re-apply the rules\r\n if (rulesChanged) {\r\n if (!this.component.isReady()) {\r\n // The chart is not yet ready (built)\r\n // We will hide the chart and delay application of rules\r\n // until \"ready\" event kicks in\r\n //component.hide(0);\r\n component.hidden = true;\r\n component.events.once(\"ready\", function (ev) {\r\n ev.target.show(0);\r\n _this._applyRules();\r\n });\r\n return;\r\n }\r\n this.dispatchImmediately(\"ruleschanged\");\r\n this._applyRules();\r\n }\r\n };\r\n Responsive.prototype._applyRules = function () {\r\n var _this = this;\r\n if (this._timeout) {\r\n this._timeout.dispose();\r\n }\r\n this._timeout = this.setTimeout(function () {\r\n _this.applyRules();\r\n }, 10);\r\n };\r\n /**\r\n * Applies current rules to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param target Target object\r\n * @todo Better type check\r\n */\r\n Responsive.prototype.applyRules = function (target) {\r\n var _this = this;\r\n // If no target supplied, we assume the top-level element\r\n var newTarget = ($type.hasValue(target)\r\n ? target\r\n : $type.getValue(this.component));\r\n // Check each rule\r\n var defaultStateApplied = false;\r\n if (this.enabled) {\r\n var isApplied_1 = false;\r\n $iter.each(this.allRules.iterator(), function (rule) {\r\n // Get relevant state\r\n var state = _this.getState(rule, newTarget);\r\n // If there's a state, it means it needs to be applied\r\n if (state) {\r\n // Check if default state was already applied to this element.\r\n // We don't want to go resetting default states to ALL element,\r\n // if they don't have responsive states.\r\n if (!defaultStateApplied) {\r\n // Nope, reset states (instantly).\r\n if ($array.indexOf(_this._appliedTargets, newTarget.uid) !== -1) {\r\n // But only if this element has any rules applied, otherwise no\r\n // point in setting current state\r\n newTarget.setState(_this.getDefaultState(newTarget), 0);\r\n }\r\n defaultStateApplied = true;\r\n }\r\n // Is this rule currently applied?\r\n if (_this.isApplied($type.getValue(rule.id))) {\r\n // Yes. Apply the responsive state\r\n state.transitionDuration = 0;\r\n _this.setTargetState(newTarget, state);\r\n _this.dispatchImmediately(\"ruleapplied\", {\r\n rule: rule\r\n });\r\n isApplied_1 = true;\r\n }\r\n }\r\n });\r\n if (isApplied_1) {\r\n $array.replace(this._appliedTargets, newTarget.uid);\r\n }\r\n else {\r\n $array.remove(this._appliedTargets, newTarget.uid);\r\n }\r\n }\r\n // Apply rules to the children\r\n if (newTarget.children) {\r\n $iter.each(newTarget.children.iterator(), function (child) {\r\n _this.applyRules(child);\r\n });\r\n }\r\n };\r\n /**\r\n * Returns a relative state for the rule/target, or `undefined` if no state is\r\n * needed.\r\n *\r\n * @param rule [description]\r\n * @param target [description]\r\n * @return [description]\r\n */\r\n Responsive.prototype.getState = function (rule, target) {\r\n var stateId = \"responsive-\" + rule.id;\r\n var tmpId = target.uid + \"_\" + stateId;\r\n if ($array.indexOf(this._noStates, tmpId) !== -1) {\r\n return;\r\n }\r\n else if (!target.states.hasKey(stateId)) {\r\n var state = rule.state(target, stateId);\r\n if (!state) {\r\n this._noStates.push(tmpId);\r\n }\r\n return state;\r\n }\r\n else {\r\n return target.states.getKey(stateId);\r\n }\r\n };\r\n /**\r\n * Creates and returns default responsive rule for the target.\r\n *\r\n * This rule will be used to \"reset\" to non-responsive values.\r\n * @param target Target Sprite\r\n * @return State\r\n */\r\n Responsive.prototype.getDefaultState = function (target) {\r\n if (target.states.hasKey(\"responsive-default\")) {\r\n return target.states.getKey(\"responsive-default\");\r\n }\r\n return target.states.create(\"responsive-default\");\r\n };\r\n /**\r\n * Sets state on the target element and updates default state with the\r\n * overwritten values if needed.\r\n *\r\n * @param target Target\r\n * @param state State\r\n */\r\n Responsive.prototype.setTargetState = function (target, state) {\r\n var _this = this;\r\n // Update default state\r\n var defaultState = this.getDefaultState(target);\r\n $object.each(state.properties, function (key, val) {\r\n if (!$type.hasValue(defaultState.properties[key])) {\r\n defaultState.properties[key] = _this.getValue(target, key);\r\n }\r\n });\r\n target.setState(state);\r\n };\r\n /**\r\n * Gets a value from an element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param target Target object\r\n * @param property Property\r\n * @return Property value\r\n */\r\n Responsive.prototype.getValue = function (target, property) {\r\n // This is a bit hacky, first we check if the property exist.\r\n // If it doesn't we try accessing target's property directly\r\n var value = target.getPropertyValue(property);\r\n if (!$type.hasValue(value) && $type.hasValue(target[property])) {\r\n value = target[property];\r\n }\r\n return value;\r\n };\r\n /**\r\n * Disposes the object.\r\n */\r\n Responsive.prototype.dispose = function () {\r\n this.disposeResponsiveHandlers();\r\n _super.prototype.dispose.call(this);\r\n };\r\n /**\r\n * Disposes all event handlers.\r\n */\r\n Responsive.prototype.disposeResponsiveHandlers = function () {\r\n var disposer = this._responsiveDisposers.pop();\r\n while (disposer) {\r\n disposer.dispose();\r\n disposer = this._responsiveDisposers.pop();\r\n }\r\n };\r\n return Responsive;\r\n}(BaseObjectEvents));\r\nexport { Responsive };\r\n/**\r\n * [defaultRules description]\r\n *\r\n * @todo description\r\n */\r\nexport var defaultRules = new List();\r\ndefaultRules.events.on(\"inserted\", function (ev) {\r\n ev.newValue.id = registry.getUniqueId();\r\n});\r\n/**\r\n *\r\n * @todo description\r\n */\r\nvar ResponsiveBreakpoints = /** @class */ (function () {\r\n function ResponsiveBreakpoints() {\r\n }\r\n // Breakpoint functions (for use in `relevant` clause of the responsive rules)\r\n ResponsiveBreakpoints.widthXXS = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.XXS;\r\n };\r\n ResponsiveBreakpoints.widthXS = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.XS;\r\n };\r\n ResponsiveBreakpoints.widthS = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.S;\r\n };\r\n ResponsiveBreakpoints.widthM = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.M;\r\n };\r\n ResponsiveBreakpoints.widthL = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.L;\r\n };\r\n ResponsiveBreakpoints.widthXL = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.XL;\r\n };\r\n ResponsiveBreakpoints.widthXXL = function (container) {\r\n return container.pixelWidth <= ResponsiveBreakpoints.XXL;\r\n };\r\n ResponsiveBreakpoints.heightXXS = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.XXS;\r\n };\r\n ResponsiveBreakpoints.heightXS = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.XS;\r\n };\r\n ResponsiveBreakpoints.heightS = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.S;\r\n };\r\n ResponsiveBreakpoints.heightM = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.M;\r\n };\r\n ResponsiveBreakpoints.heightL = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.L;\r\n };\r\n ResponsiveBreakpoints.heightXL = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.XL;\r\n };\r\n ResponsiveBreakpoints.heightXXL = function (container) {\r\n return container.pixelHeight <= ResponsiveBreakpoints.XXL;\r\n };\r\n ResponsiveBreakpoints.isXXS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XXS) && (container.pixelHeight <= ResponsiveBreakpoints.XXS);\r\n };\r\n ResponsiveBreakpoints.isXS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XS) && (container.pixelHeight <= ResponsiveBreakpoints.XS);\r\n };\r\n ResponsiveBreakpoints.isS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.S) && (container.pixelHeight <= ResponsiveBreakpoints.S);\r\n };\r\n ResponsiveBreakpoints.isM = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.M) && (container.pixelHeight <= ResponsiveBreakpoints.M);\r\n };\r\n ResponsiveBreakpoints.isL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.L) && (container.pixelHeight <= ResponsiveBreakpoints.L);\r\n };\r\n ResponsiveBreakpoints.isXL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XL) && (container.pixelHeight <= ResponsiveBreakpoints.XL);\r\n };\r\n ResponsiveBreakpoints.isXXL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XXL) && (container.pixelHeight <= ResponsiveBreakpoints.XXL);\r\n };\r\n ResponsiveBreakpoints.maybeXXS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XXS) || (container.pixelHeight <= ResponsiveBreakpoints.XXS);\r\n };\r\n ResponsiveBreakpoints.maybeXS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XS) || (container.pixelHeight <= ResponsiveBreakpoints.XS);\r\n };\r\n ResponsiveBreakpoints.maybeS = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.S) || (container.pixelHeight <= ResponsiveBreakpoints.S);\r\n };\r\n ResponsiveBreakpoints.maybeM = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.M) || (container.pixelHeight <= ResponsiveBreakpoints.M);\r\n };\r\n ResponsiveBreakpoints.maybeL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.L) || (container.pixelHeight <= ResponsiveBreakpoints.L);\r\n };\r\n ResponsiveBreakpoints.maybeXL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XL) || (container.pixelHeight <= ResponsiveBreakpoints.XL);\r\n };\r\n ResponsiveBreakpoints.maybeXXL = function (container) {\r\n return (container.pixelWidth <= ResponsiveBreakpoints.XXL) || (container.pixelHeight <= ResponsiveBreakpoints.XXL);\r\n };\r\n // Named pixel breakpoints\r\n ResponsiveBreakpoints.XXS = 100;\r\n ResponsiveBreakpoints.XS = 200;\r\n ResponsiveBreakpoints.S = 300;\r\n ResponsiveBreakpoints.M = 400;\r\n ResponsiveBreakpoints.L = 600;\r\n ResponsiveBreakpoints.XL = 800;\r\n ResponsiveBreakpoints.XXL = 1000;\r\n return ResponsiveBreakpoints;\r\n}());\r\nexport { ResponsiveBreakpoints };\r\n//# sourceMappingURL=Responsive.js.map","import { __extends, __generator } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $array from \"./Array\";\r\nimport * as $iter from \"./Iterator\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Ordered list contains values of any type in an indexed array.\r\n */\r\nvar OrderedList = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\r\n function OrderedList(initial) {\r\n /**\r\n * Holds list values.\r\n */\r\n this._values = [];\r\n /**\r\n * Event dispatcher.\r\n */\r\n this.events = new EventDispatcher();\r\n if (initial != null) {\r\n this.setAll(initial);\r\n }\r\n }\r\n Object.defineProperty(OrderedList.prototype, \"values\", {\r\n /**\r\n * All items of the list.\r\n *\r\n * Do not modify the list directly. Rather use `insert()` and `remove()`\r\n * methods.\r\n *\r\n * @return List values\r\n */\r\n get: function () {\r\n return this._values;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Inserts a value into list item array.\r\n *\r\n * @param value Value\r\n */\r\n OrderedList.prototype._insert = function (value) {\r\n this._values.push(value);\r\n return this._values.length - 1;\r\n };\r\n Object.defineProperty(OrderedList.prototype, \"length\", {\r\n /**\r\n * Number of items in the list.\r\n *\r\n * @readonly\r\n * @return Length\r\n */\r\n get: function () {\r\n return this._values.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns the index of the specific `value`.\r\n *\r\n * -1 if not found.\r\n *\r\n * @param value Value\r\n * @return Index\r\n */\r\n OrderedList.prototype.indexOf = function (value) {\r\n return $array.indexOf(this._values, value);\r\n };\r\n /**\r\n * Checks if list contains the `value`.\r\n *\r\n * @param value Value\r\n * @return In the list?\r\n */\r\n OrderedList.prototype.contains = function (value) {\r\n return this.indexOf(value) !== -1;\r\n };\r\n /**\r\n * Returns an item at specific `index`.\r\n *\r\n * @param index Index\r\n * @return Item\r\n */\r\n OrderedList.prototype.getIndex = function (index) {\r\n return this._values[index];\r\n };\r\n Object.defineProperty(OrderedList.prototype, \"first\", {\r\n /**\r\n * First item in the list.\r\n *\r\n * @return Item\r\n */\r\n get: function () {\r\n return this._values[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(OrderedList.prototype, \"last\", {\r\n /**\r\n * Last item in the list.\r\n *\r\n * @return Item\r\n */\r\n get: function () {\r\n return this._values[this._values.length - 1];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Inserts a value into list.\r\n *\r\n * @param value Value\r\n */\r\n OrderedList.prototype.insert = function (value) {\r\n var index = this._insert(value);\r\n if (this.events.isEnabled(\"inserted\")) {\r\n this.events.dispatchImmediately(\"inserted\", {\r\n type: \"inserted\",\r\n target: this,\r\n index: index,\r\n newValue: value\r\n });\r\n }\r\n };\r\n /**\r\n * Removes an item with the `value` from the list.\r\n *\r\n * @param value Value\r\n */\r\n OrderedList.prototype.remove = function (value) {\r\n var index = this.indexOf(value);\r\n if (index !== -1) {\r\n var oldValue = this._values[index];\r\n $array.removeIndex(this._values, index);\r\n if (this.events.isEnabled(\"removed\")) {\r\n this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: this,\r\n index: index,\r\n oldValue: oldValue,\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\r\n OrderedList.prototype.setAll = function (newArray) {\r\n var _this = this;\r\n $array.eachReverse(this._values, function (x, i) {\r\n _this._values.pop();\r\n if (_this.events.isEnabled(\"removed\")) {\r\n _this.events.dispatchImmediately(\"removed\", {\r\n type: \"removed\",\r\n target: _this,\r\n index: i,\r\n oldValue: x\r\n });\r\n }\r\n });\r\n $array.each(newArray, function (value) {\r\n _this.insert(value);\r\n });\r\n };\r\n /**\r\n * Removes all items from the list.\r\n */\r\n OrderedList.prototype.clear = function () {\r\n this.setAll([]);\r\n };\r\n /**\r\n * Returns part of the list between `start` and `end` indexes, as a new\r\n * [[OrderedList]].\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return Items in range\r\n */\r\n OrderedList.prototype.slice = function (start, end) {\r\n var out = new OrderedList();\r\n out._values = this._values.slice(start, end);\r\n return out;\r\n };\r\n /**\r\n * Finds a closest available index to the `value` in specified direction.\r\n *\r\n * @ignore exclude from docs\r\n * @param value value to search for\r\n * @param fn A callback function that returns value of the item\r\n * @param direction Direciton\r\n * @return Index\r\n */\r\n OrderedList.prototype.findClosestIndex = function (value, fn, direction) {\r\n if (direction === void 0) { direction = \"any\"; }\r\n // Init temporary values\r\n var closestIndex = -1;\r\n var closestValue;\r\n var closestDifference;\r\n var i = 0;\r\n $iter.eachContinue(this.iterator(), function (element) {\r\n var item = fn(element);\r\n // Calc difference\r\n if (direction === \"any\") {\r\n // Exact match?\r\n if (item === value) {\r\n // Found exact value - don't bother searching further\r\n closestIndex = i;\r\n return false;\r\n }\r\n var difference = Math.abs(value - item);\r\n if (!$type.hasValue(closestDifference) || (closestDifference > difference)) {\r\n closestIndex = i;\r\n closestValue = item;\r\n closestDifference = difference;\r\n }\r\n }\r\n else if (direction === \"left\" && (item < value)) {\r\n if (!$type.hasValue(closestValue) || (closestValue < item)) {\r\n closestIndex = i;\r\n closestValue = item;\r\n }\r\n }\r\n else if (direction === \"right\" && (item >= value)) {\r\n if (!$type.hasValue(closestValue) || (closestValue >= item)) {\r\n closestIndex = i;\r\n closestValue = item;\r\n }\r\n }\r\n ++i;\r\n return true;\r\n });\r\n // Found nothing?\r\n if (closestIndex === -1) {\r\n if (direction === \"left\") {\r\n // Use First one\r\n closestIndex = 0;\r\n }\r\n else if (direction === \"right\") {\r\n // Use last item\r\n closestIndex = this.length - 1;\r\n }\r\n }\r\n return closestIndex;\r\n };\r\n /**\r\n * Returns a list iterator.\r\n *\r\n * @return Iterator\r\n */\r\n OrderedList.prototype.iterator = function () {\r\n return $iter.fromArray(this._values);\r\n };\r\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\r\n OrderedList.prototype[Symbol.iterator] = function () {\r\n var length, i;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n length = this._values.length;\r\n i = 0;\r\n _a.label = 1;\r\n case 1:\r\n if (!(i < length)) return [3 /*break*/, 4];\r\n return [4 /*yield*/, this._values[i]];\r\n case 2:\r\n _a.sent();\r\n _a.label = 3;\r\n case 3:\r\n ++i;\r\n return [3 /*break*/, 1];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n };\r\n /**\r\n * Calls `f` for each element in the list.\r\n */\r\n OrderedList.prototype.each = function (f) {\r\n $array.each(this._values, f);\r\n };\r\n return OrderedList;\r\n}());\r\nexport { OrderedList };\r\n/**\r\n * A list where all items are ordered according to specific ordering function,\r\n * which is passed in via constructor parameter, when creating an instance of\r\n * [[SortedList]].\r\n */\r\nvar SortedList = /** @class */ (function (_super) {\r\n __extends(SortedList, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param sort Ordering function\r\n */\r\n function SortedList(sort) {\r\n var _this = _super.call(this) || this;\r\n _this._ordering = sort;\r\n return _this;\r\n }\r\n /**\r\n * Inserts item into the list.\r\n *\r\n * @param value Item\r\n */\r\n SortedList.prototype._insert = function (value) {\r\n var index = $array.getSortedIndex(this._values, this._ordering, value).index;\r\n $array.insertIndex(this._values, index, value);\r\n return index;\r\n };\r\n /**\r\n * Returns index of the item in list if found.\r\n *\r\n * -1 if item is not in the list.\r\n *\r\n * @param value Item to search for\r\n * @return Index\r\n */\r\n SortedList.prototype.indexOf = function (value) {\r\n var _a = $array.getSortedIndex(this._values, this._ordering, value), found = _a.found, index = _a.index;\r\n if (found) {\r\n return index;\r\n }\r\n else {\r\n return -1;\r\n }\r\n };\r\n /**\r\n * [udpate description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n SortedList.prototype.update = function (value) {\r\n // @todo test this\r\n var index = $array.indexOf(this._values, value);\r\n // @todo throw an error if it doesn't exist ?\r\n if (index !== -1) {\r\n var last = this._values.length - 1;\r\n // Check if the current ordering is correct\r\n if (!((index === 0 || this._ordering(this._values[index - 1], value) < 0) &&\r\n (index === last || this._ordering(value, this._values[index + 1]) < 0))) {\r\n // TODO send remove/insert/move events\r\n $array.removeIndex(this._values, index);\r\n this._insert(value);\r\n }\r\n }\r\n };\r\n return SortedList;\r\n}(OrderedList));\r\nexport { SortedList };\r\n/**\r\n * A version of a [[OrderedList]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\r\nvar OrderedListTemplate = /** @class */ (function (_super) {\r\n __extends(OrderedListTemplate, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n */\r\n function OrderedListTemplate(t) {\r\n var _this = _super.call(this) || this;\r\n _this.template = t;\r\n return _this;\r\n }\r\n Object.defineProperty(OrderedListTemplate.prototype, \"template\", {\r\n /**\r\n * @return Template object\r\n */\r\n get: function () {\r\n return this._template;\r\n },\r\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\r\n set: function (v) {\r\n v.isTemplate = true;\r\n this._template = v;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\r\n OrderedListTemplate.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source.iterator(), function (value) {\r\n _this.insert(value.clone());\r\n });\r\n };\r\n /**\r\n * Returns part of the list, starting at `start` and ending at `end` indexes,\r\n * as a new [[OrderedListTemplate]].\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @return New list\r\n */\r\n OrderedListTemplate.prototype.slice = function (start, end) {\r\n var out = new OrderedListTemplate(this.template);\r\n out._values = this._values.slice(start, end);\r\n return out;\r\n };\r\n OrderedListTemplate.prototype.create = function (make) {\r\n var clone = (make != null\r\n ? new make()\r\n : this.template.clone());\r\n this.insert(clone);\r\n return clone;\r\n };\r\n return OrderedListTemplate;\r\n}(OrderedList));\r\nexport { OrderedListTemplate };\r\n/**\r\n * A version of a [[SortedList]] that has a \"template\".\r\n *\r\n * A template is an instance of an object, that can be used to create new\r\n * elements in the list without actually needing to create instances for those.\r\n *\r\n * When new element is created in the list, e.g. by calling its `create()`\r\n * method, an exact copy of the element is created (including properties and\r\n * other attributes), inserted into the list and returned.\r\n */\r\nvar SortedListTemplate = /** @class */ (function (_super) {\r\n __extends(SortedListTemplate, _super);\r\n /**\r\n * Constructor\r\n *\r\n * @param t Template object\r\n * @param sort Ordering function\r\n */\r\n function SortedListTemplate(t, sort) {\r\n var _this = _super.call(this, sort) || this;\r\n _this.template = t;\r\n return _this;\r\n }\r\n Object.defineProperty(SortedListTemplate.prototype, \"template\", {\r\n /**\r\n * @return Template object\r\n */\r\n get: function () {\r\n return this._template;\r\n },\r\n /**\r\n * A \"template\" object to copy all properties from when creating new list\r\n * items.\r\n *\r\n * @param v Template object\r\n */\r\n set: function (v) {\r\n v.isTemplate = true;\r\n this._template = v;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all elements from other list.\r\n *\r\n * @param source Source list\r\n */\r\n SortedListTemplate.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n $iter.each(source.iterator(), function (value) {\r\n _this.insert(value.clone());\r\n });\r\n };\r\n SortedListTemplate.prototype.create = function (make) {\r\n var clone = (make != null\r\n ? new make()\r\n : this.template.clone());\r\n this.insert(clone);\r\n return clone;\r\n };\r\n return SortedListTemplate;\r\n}(SortedList));\r\nexport { SortedListTemplate };\r\n//# sourceMappingURL=SortedList.js.map","/**\r\n * ============================================================================\r\n * COMPARING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Comparing function used for ordering.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Use localeCompare\r\n * @param a Item 1\r\n * @param b Item 2\r\n * @return Result\r\n */\r\nexport function order(a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * OTHER FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Repeats a `string` number of times as set in `amount`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make this faster\r\n * @param string Source string\r\n * @param amount Number of times to repeat string\r\n * @return New string\r\n */\r\nexport function repeat(string, amount) {\r\n return new Array(amount + 1).join(string);\r\n}\r\n/**\r\n * Generates a random string `characters` length.\r\n *\r\n * @param chars Number of characters\r\n * @return Random string\r\n */\r\nexport function random(chars) {\r\n var res = \"\";\r\n var choice = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n for (var i = 0; i < chars; i++) {\r\n res += choice.charAt(Math.floor(Math.random() * choice.length));\r\n }\r\n return res;\r\n}\r\n//# sourceMappingURL=String.js.map","/**\r\n * A collection of String-based constants.\r\n * @hidden\r\n * @ignore Exclude from docs\r\n */\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var PX = \"px\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var STRING = \"string\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var NUMBER = \"number\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var DATE = \"date\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var DURATION = \"duration\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var PLACEHOLDER = \"__§§§__\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport var PLACEHOLDER2 = \"__§§§§__\";\r\n//# sourceMappingURL=Strings.js.map","import * as $type from \"../utils/Type\";\r\n/**\r\n * Maps time period names to their numeric representations in milliseconds.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport var timeUnitDurations = {\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 * Returns the next time unit that goes after source `unit`.\r\n *\r\n * E.g. \"hour\" is the next unit after \"minute\", etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Source time unit\r\n * @return Next time unit\r\n */\r\nexport function getNextUnit(unit) {\r\n switch (unit) {\r\n case \"year\":\r\n return;\r\n case \"month\":\r\n return \"year\";\r\n case \"week\":\r\n return \"month\";\r\n case \"day\":\r\n return \"month\"; // not a mistake\r\n case \"hour\":\r\n return \"day\";\r\n case \"minute\":\r\n return \"hour\";\r\n case \"second\":\r\n return \"minute\";\r\n case \"millisecond\":\r\n return \"second\";\r\n }\r\n}\r\n/**\r\n * Returns number of milliseconds in the `count` of time `unit`.\r\n *\r\n * Available units: \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\",\r\n * \"month\", and \"year\".\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Time unit\r\n * @param count Number of units\r\n * @return Milliseconds\r\n */\r\nexport function getDuration(unit, count) {\r\n if (!$type.hasValue(count)) {\r\n count = 1;\r\n }\r\n return timeUnitDurations[unit] * count;\r\n}\r\n/**\r\n * Returns current `Date` object.\r\n *\r\n * @return Current date\r\n */\r\nexport function now() {\r\n return new Date();\r\n}\r\n/**\r\n * Returns current timestamp.\r\n *\r\n * @return Current timestamp\r\n */\r\nexport function getTime() {\r\n return now().getTime();\r\n}\r\n/**\r\n * Returns a copy of the `Date` object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @return Copy\r\n */\r\nexport function copy(date) {\r\n return new Date(date.getTime()); // todo: check if this is ok. new Date(date) used to strip milliseconds on FF in v3\r\n}\r\n/**\r\n * Checks if the `unit` part of two `Date` objects do not match. Two dates\r\n * represent a \"range\" of time, rather the same time date.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dateOne Date 1\r\n * @param dateTwo Date 2\r\n * @param unit Time unit to check\r\n * @return Range?\r\n */\r\nexport function checkChange(dateOne, dateTwo, unit, utc) {\r\n dateOne = new Date(dateOne.getTime());\r\n dateTwo = new Date(dateTwo.getTime());\r\n var timeZoneOffset1 = 0;\r\n var timeZoneOffset2 = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset1 = dateOne.getTimezoneOffset();\r\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() - timeZoneOffset1);\r\n timeZoneOffset2 = dateTwo.getTimezoneOffset();\r\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() - timeZoneOffset2);\r\n }\r\n var changed = false;\r\n switch (unit) {\r\n case \"year\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"month\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"day\":\r\n if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCDate() != dateTwo.getUTCDate()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"hour\":\r\n if (dateOne.getUTCHours() != dateTwo.getUTCHours()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"minute\":\r\n if (dateOne.getUTCMinutes() != dateTwo.getUTCMinutes()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"second\":\r\n if (dateOne.getUTCSeconds() != dateTwo.getUTCSeconds()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"millisecond\":\r\n if (dateOne.getTime() != dateTwo.getTime()) {\r\n changed = true;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n return true;\r\n }\r\n var nextUnit = getNextUnit(unit);\r\n if (nextUnit) {\r\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() + timeZoneOffset1);\r\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() + timeZoneOffset2);\r\n return checkChange(dateOne, dateTwo, nextUnit, utc);\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Adds `count` of time `unit` to the source date. Returns a modified `Date` object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to add\r\n * @return Modified date\r\n */\r\nexport function add(date, unit, count, utc) {\r\n var timeZoneOffset = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n var day = date.getUTCDate();\r\n date.setUTCDate(day + count);\r\n break;\r\n case \"second\":\r\n var seconds = date.getUTCSeconds();\r\n date.setUTCSeconds(seconds + count);\r\n break;\r\n case \"millisecond\":\r\n var milliseconds = date.getUTCMilliseconds();\r\n date.setUTCMilliseconds(milliseconds + count);\r\n break;\r\n case \"hour\":\r\n var hours = date.getUTCHours();\r\n date.setUTCHours(hours + count);\r\n break;\r\n case \"minute\":\r\n var minutes = date.getUTCMinutes();\r\n date.setUTCMinutes(minutes + count);\r\n break;\r\n case \"year\":\r\n var year = date.getUTCFullYear();\r\n date.setUTCFullYear(year + count);\r\n break;\r\n case \"month\":\r\n var month = date.getUTCMonth();\r\n date.setUTCMonth(month + count);\r\n break;\r\n case \"week\":\r\n var wday = date.getUTCDate();\r\n date.setUTCDate(wday + count * 7);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n var newTimeZoneOffset = date.getTimezoneOffset();\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n var diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n // solves issues if newe time falls back to old time zone\r\n if (date.getTimezoneOffset() != newTimeZoneOffset) {\r\n date.setUTCMinutes(date.getUTCMinutes() - diff);\r\n }\r\n }\r\n }\r\n }\r\n return date;\r\n}\r\n/**\r\n * \"Rounds\" the date to specific time unit.\r\n *\r\n * @ignore Exclude from docs\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to round to\r\n * @param firstDateOfWeek First day of week\r\n * @param roundMinutes Minutes to round to (some timezones use non-whole hour)\r\n * @param timezone Use specific named timezone when rounding\r\n * @return New date\r\n */\r\nexport function round(date, unit, count, firstDateOfWeek, utc, firstDate, roundMinutes, timezone) {\r\n if (roundMinutes === void 0) { roundMinutes = 0; }\r\n if (!$type.isNumber(count)) {\r\n count = 1;\r\n }\r\n var timeZoneOffset = 0;\r\n if (timezone && [\"day\", \"month\", \"week\", \"year\"].indexOf(unit) != -1) {\r\n date = setTimezone(date, timezone);\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n var day = date.getUTCDate();\r\n if (count > 1) {\r\n //\tday = Math.floor(day / count) * count;\r\n if (firstDate) {\r\n firstDate = round(firstDate, \"day\", 1);\r\n var difference = date.getTime() - firstDate.getTime();\r\n var unitCount = Math.floor(difference / getDuration(\"day\") / count);\r\n var duration = getDuration(\"day\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\r\n }\r\n }\r\n else {\r\n date.setUTCDate(day);\r\n }\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"second\":\r\n var seconds = date.getUTCSeconds();\r\n if (count > 1) {\r\n seconds = Math.floor(seconds / count) * count;\r\n }\r\n date.setUTCSeconds(seconds, 0);\r\n break;\r\n case \"millisecond\":\r\n if (count == 1) {\r\n return date; // much better for perf!\r\n }\r\n var milliseconds = date.getUTCMilliseconds();\r\n milliseconds = Math.floor(milliseconds / count) * count;\r\n date.setUTCMilliseconds(milliseconds);\r\n break;\r\n case \"hour\":\r\n var hours = date.getUTCHours();\r\n if (count > 1) {\r\n hours = Math.floor(hours / count) * count;\r\n }\r\n date.setUTCHours(hours, roundMinutes, 0, 0);\r\n break;\r\n case \"minute\":\r\n var minutes = date.getUTCMinutes();\r\n milliseconds = date.getUTCMilliseconds();\r\n if (count > 1) {\r\n minutes = Math.floor(minutes / count) * count;\r\n }\r\n date.setUTCMinutes(minutes, 0, 0);\r\n break;\r\n case \"month\":\r\n var month = date.getUTCMonth();\r\n if (count > 1) {\r\n month = Math.floor(month / count) * count;\r\n }\r\n date.setUTCMonth(month, 1);\r\n date.setUTCHours(0, roundMinutes, 0, 0);\r\n break;\r\n case \"year\":\r\n var year = date.getUTCFullYear();\r\n if (count > 1) {\r\n year = Math.floor(year / count) * count;\r\n }\r\n date.setUTCFullYear(year, 0, 1);\r\n date.setUTCHours(0, roundMinutes, 0, 0);\r\n //let nonUTCDateY = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n //timeZoneOffset = nonUTCDateY.getTimezoneOffset();\r\n break;\r\n case \"week\":\r\n var wday = date.getUTCDate();\r\n var weekDay = date.getUTCDay();\r\n if (!$type.isNumber(firstDateOfWeek)) {\r\n firstDateOfWeek = 1;\r\n }\r\n // todo: rounding when count is not 1\r\n if (weekDay >= firstDateOfWeek) {\r\n wday = wday - weekDay + firstDateOfWeek;\r\n }\r\n else {\r\n wday = wday - (7 + weekDay) + firstDateOfWeek;\r\n }\r\n date.setUTCDate(wday);\r\n date.setUTCHours(0, roundMinutes, 0, 0);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n var newTimeZoneOffset = date.getTimezoneOffset();\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n var diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n }\r\n }\r\n }\r\n return date;\r\n}\r\n/**\r\n * Returns a new `Date` object which corresponds to the source date in a\r\n * specific timezone.\r\n *\r\n * @since 4.10.1\r\n * @param date Source date\r\n * @param timezone Timezone identifier\r\n * @return Recalculated new Date\r\n */\r\nexport function setTimezone(date, timezone) {\r\n var d = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\r\n return d;\r\n}\r\n/**\r\n * Returns minute fraction of the set timezone.\r\n *\r\n * @since 4.10.12\r\n * @param timezone Timezone identifier\r\n * @return Minutes\r\n */\r\nexport function getTimezoneMinutes(timezone) {\r\n var d = new Date();\r\n d.setHours(0, 0, 0, 0);\r\n var d2 = setTimezone(d, timezone);\r\n return d2.getMinutes();\r\n}\r\n//# sourceMappingURL=Time.js.map","/**\r\n * A collection of utility functions for various type checks and conversion\r\n * @todo Review unused functions for removal\r\n * @hidden\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { percent, isPercent } from \"./Percent\";\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns `true` if value is not a number (NaN).\r\n *\r\n * @param value Input value\r\n * @return Is NaN?\r\n * @deprecated Is not used anywhere. JS built-in isNaN is used everywhere. Maybe we don't need this, or if we do, then we should use it everywhere\r\n */\r\nexport function isNaN(value) {\r\n return Number(value) !== value;\r\n}\r\n/**\r\n * Returns a type of the value.\r\n *\r\n * @param value Input value\r\n * @return Type of the value\r\n */\r\nexport function getType(value) {\r\n return ({}).toString.call(value);\r\n}\r\n/**\r\n * Returns a default value if the passed in value is empty.\r\n *\r\n * @param value Input value\r\n * @param optional Default value\r\n * @return Value or default value whichever is available\r\n * @deprecated Not used anywhere\r\n */\r\nexport function getDefault(value, optional) {\r\n return value || optional;\r\n}\r\n/**\r\n * Checks if the passed in value is a string.\r\n *\r\n * @param value Value\r\n * @return Is string?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\r\nexport function checkString(value) {\r\n if (typeof value === \"string\") {\r\n return true;\r\n }\r\n else {\r\n throw new Error(\"Expected a string but got \" + getType(value));\r\n }\r\n}\r\n/**\r\n * Checks if the passed in value is a boolean.\r\n *\r\n * @param value Value\r\n * @return Is boolean?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\r\nexport function checkBoolean(value) {\r\n if (typeof value === \"boolean\") {\r\n return true;\r\n }\r\n else {\r\n throw new Error(\"Expected a boolean but got \" + getType(value));\r\n }\r\n}\r\n/**\r\n * Checks if the passed in value is a number.\r\n *\r\n * @param value Value\r\n * @return Is number?\r\n * @throws {Error}\r\n */\r\nexport function checkNumber(value) {\r\n if (typeof value === \"number\") {\r\n if (isNaN(value)) {\r\n throw new Error(\"Expected a number but got NaN\");\r\n }\r\n }\r\n else {\r\n throw new Error(\"Expected a number but got \" + getType(value));\r\n }\r\n return true;\r\n}\r\n/**\r\n * Checks if the passed in value is an object.\r\n *\r\n * @param value Value\r\n * @return Is object?\r\n * @throws {Error}\r\n * @todo Is the input type correct?\r\n * @deprecated Not used anywhere\r\n */\r\nexport function checkObject(value) {\r\n var t = getType(value);\r\n if (t === \"[object Object]\") {\r\n return true;\r\n }\r\n else {\r\n throw new Error(\"Expected an object but got \" + t);\r\n }\r\n}\r\n/**\r\n * Checks if the passed in value is an array.\r\n *\r\n * @param value Value\r\n * @return Is array?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\r\nexport function checkArray(value) {\r\n if (Array.isArray(value)) {\r\n return true;\r\n }\r\n else {\r\n throw new Error(\"Expected an array but got \" + getType(value));\r\n }\r\n}\r\n/**\r\n * Checks if the passed in value is a Date object.\r\n *\r\n * @param value Value\r\n * @return Is Date object?\r\n * @throws {Error}\r\n * @deprecated Not used anywhere\r\n */\r\nexport function checkDate(value) {\r\n var t = getType(value);\r\n if (t === \"[object Date]\") {\r\n return true;\r\n }\r\n else {\r\n throw new Error(\"Expected a date but got \" + t);\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * TYPE CASTING\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Casts string or a number into string.\r\n *\r\n * @param value Input\r\n * @return String value\r\n * @deprecated Not used anywhere\r\n */\r\nexport function castString(value) {\r\n if (typeof value === \"string\") {\r\n return value;\r\n }\r\n else if (typeof value === \"number\") {\r\n return \"\" + value;\r\n }\r\n else {\r\n throw new Error(\"Expected a string or number but got \" + getType(value));\r\n }\r\n}\r\n/**\r\n * Casts string or a number into a number.\r\n *\r\n * @param value Input value\r\n * @return Number value\r\n * @throws {Error}\r\n */\r\nexport function castNumber(value) {\r\n if (typeof value === \"string\") {\r\n var number = +value;\r\n if (isNaN(number)) {\r\n throw new Error(\"Cannot cast string \" + JSON.stringify(value) + \" to a number\");\r\n }\r\n else {\r\n return number;\r\n }\r\n }\r\n else if (typeof value === \"number\") {\r\n if (isNaN(value)) {\r\n throw new Error(\"Expected a number but got NaN\");\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n else {\r\n var t = getType(value);\r\n if (t === \"[object Date]\") {\r\n return value.getTime();\r\n }\r\n else {\r\n throw new Error(\"Expected a string, number, or date but got \" + t);\r\n }\r\n }\r\n}\r\n/**\r\n * Casts number, string or Date into a Date object.\r\n *\r\n * @param value Input value\r\n * @return Date object\r\n * @deprecated Not used anywhere\r\n * @throws {Error}\r\n * @hidden\r\n * @deprecated\r\n */\r\n/*export function castDate(value: string | number | Date, formatter?: DateFormatter): Date {\r\n if (typeof value === \"string\") {\r\n if (formatter) {\r\n return formatter.parse(value);\r\n }\r\n return new Date(value);\r\n\r\n } else if (typeof value === \"number\") {\r\n return new Date(value);\r\n\r\n } else {\r\n const t = getType(value);\r\n\r\n if (t === \"[object Date]\") {\r\n return value;\r\n\r\n } else {\r\n throw new Error(\"Expected a string, number, or date but got \" + t);\r\n }\r\n }\r\n}*/\r\n/**\r\n * ============================================================================\r\n * QUICK CONVERSION\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts any value into `boolean`.\r\n *\r\n * @param value Source value\r\n * @return `true` or `false`\r\n */\r\nexport function toBoolean(value) {\r\n return value ? true : false;\r\n}\r\n/**\r\n * Converts any value into a `number`.\r\n *\r\n * @param value Source value\r\n * @return Number representation of value\r\n */\r\nexport function toNumber(value) {\r\n if (hasValue(value) && !isNumber(value)) {\r\n var converted = Number(value);\r\n if (isNaN(converted) && isString(value) && value != \"\") {\r\n return toNumber(value.replace(/[^0-9.\\-]+/g, ''));\r\n }\r\n return converted;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Converts any value into a string (text).\r\n *\r\n * @param value Source value\r\n * @return String representation of the input\r\n */\r\nexport function toText(value) {\r\n if (hasValue(value) && !isString(value)) {\r\n if (isNumber(value)) {\r\n return castString(value);\r\n }\r\n else if (isObject(value)) {\r\n return value.toString();\r\n }\r\n }\r\n return value;\r\n}\r\n/**\r\n * Converts any value to a number or [[Percent]].\r\n *\r\n * If the parameter is a string and contains \"%\", it will\r\n * convert it into a [[Percent]].\r\n *\r\n * Otherwise, it will convert into a number.\r\n *\r\n * @param value Number or percent\r\n * @return Percent object\r\n */\r\nexport function toNumberOrPercent(value) {\r\n if (!hasValue(value) || isNumber(value) || isPercent(value)) {\r\n return value;\r\n }\r\n if (isString(value) && value.indexOf(\"%\") != -1) {\r\n return percent(toNumber(value));\r\n }\r\n return toNumber(value);\r\n}\r\n/**\r\n * Checks if a variable has a value.\r\n *\r\n * @param a Input value\r\n * @returns Has value?\r\n */\r\nexport function hasValue(a) {\r\n return a != null;\r\n}\r\n/**\r\n * Returns a value or throws an {Error} exception if the variable has not\r\n * value.\r\n *\r\n * @param a Input value\r\n * @returns Value\r\n */\r\nexport function getValue(a) {\r\n if (hasValue(a)) {\r\n return a;\r\n }\r\n else {\r\n throw new Error(\"Value doesn't exist\");\r\n }\r\n}\r\n/**\r\n * Returns a value, or returns the default value if it doesn't have a value.\r\n *\r\n * @param a Input value\r\n * @returns Value\r\n */\r\nexport function getValueDefault(a, defaultValue) {\r\n if (hasValue(a)) {\r\n return a;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Checks if parameter is `Date`.\r\n *\r\n * @param value Input value\r\n * @return Is Date?\r\n */\r\nexport function isDate(value) {\r\n return getType(value) === \"[object Date]\";\r\n}\r\n/**\r\n * Checks if parameter is `string`.\r\n *\r\n * @param value Input value\r\n * @return Is string?\r\n */\r\nexport function isString(value) {\r\n return typeof value === \"string\";\r\n}\r\n/**\r\n * Checks if parameter is `number`.\r\n *\r\n * @param value Input value\r\n * @return Is number?\r\n */\r\nexport function isNumber(value) {\r\n return typeof value === \"number\" && Number(value) == value;\r\n}\r\n/**\r\n * Checks if parameter is `object`.\r\n *\r\n * @param value Input value\r\n * @return Is object?\r\n */\r\nexport function isObject(value) {\r\n return typeof value === \"object\" && value != null;\r\n}\r\n/**\r\n * Checks if parameter is `Array`.\r\n *\r\n * @param value Input value\r\n * @return Is Array?\r\n */\r\nexport function isArray(value) {\r\n return Array.isArray(value);\r\n}\r\n//# sourceMappingURL=Type.js.map","/**\r\n * A collection of universal utility functions.\r\n */\r\nimport { Percent } from \"./Percent\";\r\nimport { isSafari } from \"./Browser\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $string from \"./String\";\r\nimport * as $strings from \"./Strings\";\r\nimport * as $object from \"./Object\";\r\nimport * as $array from \"./Array\";\r\n/**\r\n * ============================================================================\r\n * MISC FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Marks a value as being used (e.g. because the value has side effects).\r\n */\r\nexport function used(value) { }\r\n/**\r\n * Copies all properties of one object to the other, omitting undefined.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n * @todo Maybe consolidate with utils.copy?\r\n */\r\nexport function copyProperties(source, target) {\r\n $object.each(source, function (key, value) {\r\n // only if value is set\r\n if ($type.hasValue(value)) {\r\n target[key] = value;\r\n }\r\n });\r\n return target;\r\n}\r\n/**\r\n * Removes target from url\r\n */\r\nexport function stripHash(url) {\r\n return /^[^#]*/.exec(url)[0];\r\n}\r\nexport function getBaseURI() {\r\n var url = \"#\";\r\n // Needed until https://bugs.webkit.org/show_bug.cgi?id=189499 is fixed\r\n if (isSafari()) {\r\n var baseURI = document.baseURI;\r\n if (baseURI) {\r\n baseURI = stripHash(baseURI);\r\n var loc = stripHash(location.href);\r\n if (baseURI !== loc) {\r\n url = loc + url;\r\n }\r\n }\r\n }\r\n return url;\r\n}\r\n/**\r\n * Copies all properties of one object to the other, omitting undefined, but only if property in target object doesn't have a value set.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n * @todo Maybe consolidate with utils.copy?\r\n */\r\nexport function softCopyProperties(source, target) {\r\n $object.each(source, function (key, value) {\r\n // only if value is set\r\n if ($type.hasValue(value) && !($type.hasValue(target[key]))) {\r\n target[key] = value;\r\n }\r\n });\r\n return target;\r\n}\r\n/**\r\n * Copies all properties of one object to the other.\r\n *\r\n * @param source Source object\r\n * @param recipient Target object\r\n * @return Updated target object\r\n */\r\nexport function copy(source, target) {\r\n $object.each(source, function (key, value) {\r\n target[key] = value;\r\n });\r\n return target;\r\n}\r\n/**\r\n * Checks if value is not empty (undefined or zero-length string).\r\n *\r\n * @param value Value to check\r\n * @return `true` if value is not \"empty\"\r\n */\r\nexport function isNotEmpty(value) {\r\n return $type.hasValue(value) && (value.toString() !== \"\");\r\n}\r\n/**\r\n * [relativeToValue description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param percent [description]\r\n * @param full [description]\r\n * @return [description]\r\n */\r\nexport function relativeToValue(percent, full) {\r\n if ($type.isNumber(percent)) {\r\n return percent;\r\n }\r\n else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\r\n return full * percent.value;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/**\r\n * [relativeRadiusToValue description]\r\n *\r\n * Differs from relativeToValue so that if a value is negative, it subtracts\r\n * it from full value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param percent [description]\r\n * @param full [description]\r\n * @param subtractIfNegative [description]\r\n * @return [description]\r\n */\r\nexport function relativeRadiusToValue(percent, full, subtractIfNegative) {\r\n var value;\r\n if ($type.isNumber(percent)) {\r\n value = percent;\r\n if (value < 0) {\r\n if (subtractIfNegative) {\r\n value = full + value;\r\n }\r\n else {\r\n value = full - value;\r\n }\r\n }\r\n }\r\n else if (percent != null && $type.isNumber(percent.value)) {\r\n value = full * percent.value;\r\n }\r\n return value;\r\n}\r\n/**\r\n * [valueToRelative description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n * @param full [description]\r\n * @return [description]\r\n */\r\nexport function valueToRelative(value, full) {\r\n if (value instanceof Percent) {\r\n return value.value;\r\n }\r\n else {\r\n return value / full;\r\n }\r\n}\r\n/**\r\n * Returns pixel ratio of the current screen (used on retina displays).\r\n *\r\n * @return Pixel ratio\r\n */\r\nexport function getPixelRatio() {\r\n var ratio = window.devicePixelRatio || 1;\r\n return ratio;\r\n}\r\n/**\r\n * ============================================================================\r\n * STRING FORMATTING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts camelCased text to dashed version:\r\n * (\"thisIsString\" > \"this-is-string\")\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function camelToDashed(str) {\r\n return str.replace(/\\W+/g, '-').replace(/([a-z\\d])([A-Z])/g, '$1-$2').toLowerCase();\r\n}\r\n/**\r\n * Converts tring to uppercase.\r\n *\r\n * @param str String to convert\r\n * @return uppercased string\r\n * @todo Maybe make it better\r\n */\r\nexport function capitalize(str) {\r\n var arr = str.split(\"\");\r\n arr[0] = arr[0].toUpperCase();\r\n return arr.join(\"\");\r\n}\r\n/**\r\n * Converts any value into its string representation.\r\n *\r\n * @param value Value\r\n * @return String represantation of the value\r\n */\r\nexport function stringify(value) {\r\n return JSON.stringify(value);\r\n}\r\n/**\r\n * Escapes string so it can safely be used in a Regex.\r\n *\r\n * @param value Unsescaped string\r\n * @return Escaped string\r\n */\r\nexport function escapeForRgex(value) {\r\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\r\n/**\r\n * Splits the text into multiple lines, respecting maximum character count.\r\n * Prioretizes splitting on spaces and punctuation. Falls back on splitting\r\n * mid-word if there's no other option.\r\n *\r\n * @param text Text\r\n * @param maxChars Maximum number of characters per line\r\n * @return An array of split text\r\n */\r\nexport function splitTextByCharCount(text, maxChars, fullWords, rtl, fullWordFallback) {\r\n // Maybe the text fits?\r\n if (text.length <= maxChars) {\r\n return [text];\r\n }\r\n // Init result\r\n var res = [];\r\n // Split by words or by charts\r\n if (fullWords) {\r\n // Split by words first\r\n // Split by spacing\r\n var currentIndex = -1;\r\n //let tmpText = text.replace(/([,;:!?\\\\\\/\\.]+[\\s]+|[\\s])/g, $strings.PLACEHOLDER + \"$1\" + $strings.PLACEHOLDER);\r\n var tmpText = text.replace(/([,;:!?\\\\\\/]+|[\\s])/g, $strings.PLACEHOLDER + \"$1\" + $strings.PLACEHOLDER);\r\n var words = tmpText.split($strings.PLACEHOLDER);\r\n // Glue end-of-word punctuation to the word itself\r\n for (var i = 1; i < words.length; i++) {\r\n var word = words[i];\r\n if ((word == \".\" || word == \",\") && words[i - 1].match(/[\\w]+$/)) {\r\n words[i - 1] += word;\r\n words[i] = \"\";\r\n }\r\n }\r\n // Process each word\r\n for (var i = 0; i < words.length; i++) {\r\n // Get word and symbol count\r\n var word = words[i];\r\n var wordLength = word.length;\r\n // Ignore empty words\r\n if (wordLength === 0) {\r\n continue;\r\n }\r\n // Check word length\r\n if ((wordLength > maxChars) && (fullWords !== true || fullWordFallback != false)) {\r\n //if (wordLength > maxChars) {\r\n // A single word is longer than allowed symbol count\r\n // Break it up\r\n if (rtl) {\r\n word = reverseString(word);\r\n }\r\n var parts = word.match(new RegExp(\".{1,\" + maxChars + \"}\", \"g\"));\r\n // TODO is this correct ?\r\n if (parts) {\r\n if (rtl) {\r\n for (var x = 0; x < parts.length; x++) {\r\n parts[x] = reverseString(parts[x]);\r\n }\r\n //parts.reverse();\r\n }\r\n res = res.concat(parts);\r\n }\r\n }\r\n else {\r\n // Init current line\r\n if (currentIndex === -1) {\r\n res.push(\"\");\r\n currentIndex = 0;\r\n }\r\n // Check if we need to break into another line\r\n if (((res[currentIndex].length + wordLength + 1) > maxChars) && res[currentIndex] !== \"\") {\r\n res.push(\"\");\r\n currentIndex++;\r\n }\r\n // Add word\r\n res[currentIndex] += word;\r\n }\r\n // Update index\r\n currentIndex = res.length - 1;\r\n }\r\n }\r\n else {\r\n // Splitting by anywhere (living la vida facil)\r\n var parts = text.match(new RegExp(\".{1,\" + maxChars + \"}\", \"g\"));\r\n if (parts) {\r\n if (rtl) {\r\n for (var x = 0; x < parts.length; x++) {\r\n parts[x] = reverseString(parts[x]);\r\n }\r\n }\r\n res = parts;\r\n }\r\n }\r\n // Do we have only one word that does not fit?\r\n // Since fullWords is set and we can't split the word, we end up with empty\r\n // set.\r\n if (res.length == 1 && fullWords && fullWordFallback && (res[0].length > maxChars)) {\r\n res = [];\r\n }\r\n return res;\r\n}\r\n/**\r\n * Truncates the text to certain character count.\r\n *\r\n * Will add ellipsis if the string is truncated. Optionally, can truncate on\r\n * full words only.\r\n *\r\n * For RTL support, pass in the fifth parameter as `true`.\r\n *\r\n * @param text Input text\r\n * @param maxChars Maximum character count of output\r\n * @param ellipsis Ellipsis string, i.e. \"...\"\r\n * @param fullWords If `true`, will not break mid-word, unless there's a single word and it does not with into `maxChars`\r\n * @param rtl Is this an RTL text?\r\n * @return Truncated text\r\n */\r\nexport function truncateWithEllipsis(text, maxChars, ellipsis, fullWords, rtl) {\r\n if (text.length <= maxChars) {\r\n return text;\r\n }\r\n // Calc max chars\r\n maxChars -= ellipsis.length;\r\n if (maxChars < 1) {\r\n maxChars = 1;\r\n //ellipsis = \"\";\r\n }\r\n // Get lines\r\n var lines = splitTextByCharCount(text, maxChars, fullWords, rtl);\r\n // Use first line\r\n return (lines[0] || \"\") + ellipsis;\r\n}\r\n/**\r\n * Removes whitespace from beginning and end of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function trim(str) {\r\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\r\n}\r\n;\r\n/**\r\n * Removes whitespace from end of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function rtrim(str) {\r\n return str.replace(/[\\s\\uFEFF\\xA0]+$/g, \"\");\r\n}\r\n;\r\n/**\r\n * Removes whitespace from beginning of the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function ltrim(str) {\r\n return str.replace(/^[\\s\\uFEFF\\xA0]+/g, \"\");\r\n}\r\n;\r\n/**\r\n * Reverses string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\n/**\r\n * Removes quotes from the string.\r\n *\r\n * @param str Input\r\n * @return Output\r\n */\r\nexport function unquote(str) {\r\n var res = str.trim();\r\n res = str.replace(/^'(.*)'$/, \"$1\");\r\n if (res == str) {\r\n res = str.replace(/^\"(.*)\"$/, \"$1\");\r\n }\r\n return res;\r\n}\r\n/**\r\n * Pads a string with additional characters to certain length.\r\n *\r\n * @param value A numeric value\r\n * @param len Result string length in characters\r\n * @param char A character to use for padding\r\n * @return Padded value as string\r\n */\r\nexport function padString(value, len, char) {\r\n if (len === void 0) { len = 0; }\r\n if (char === void 0) { char = \"0\"; }\r\n if (typeof value !== \"string\") {\r\n value = value.toString();\r\n }\r\n return len > value.length ? Array(len - value.length + 1).join(char) + value : value;\r\n}\r\n/**\r\n * Tries to determine format type.\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format string\r\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\r\n */\r\nexport function getFormat(format) {\r\n // Undefined?\r\n if (typeof format === \"undefined\") {\r\n return $strings.STRING;\r\n }\r\n // Cleanup and lowercase format\r\n format = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\r\n // Remove style tags\r\n format = format.replace(/\\[[^\\]]+\\]/, \"\");\r\n // Trim\r\n format = format.trim();\r\n // Check for any explicit format hints (i.e. /Date)\r\n var hints = format.match(/\\/(date|number|duration)$/);\r\n if (hints) {\r\n return hints[1];\r\n }\r\n // Check for explicit hints\r\n if (format === $strings.NUMBER) {\r\n return $strings.NUMBER;\r\n }\r\n if (format === $strings.DATE) {\r\n return $strings.DATE;\r\n }\r\n if (format === $strings.DURATION) {\r\n return $strings.DURATION;\r\n }\r\n // Detect number formatting symbols\r\n if (format.match(/[#0]/)) {\r\n return $strings.NUMBER;\r\n }\r\n // Detect date formatting symbols\r\n if (format.match(/[ymwdhnsqaxkzgtei]/)) {\r\n return $strings.DATE;\r\n }\r\n // Nothing? Let's display as string\r\n return $strings.STRING;\r\n}\r\n/**\r\n * Cleans up format:\r\n * * Strips out formatter hints\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format\r\n * @return Cleaned format\r\n */\r\nexport function cleanFormat(format) {\r\n return format.replace(/\\/(date|number|duration)$/i, \"\");\r\n}\r\n/**\r\n * Strips all tags from the string.\r\n *\r\n * @param text Source string\r\n * @return String without tags\r\n */\r\nexport function stripTags(text) {\r\n return text ? text.replace(/<[^>]*>/g, \"\") : text;\r\n}\r\n/**\r\n * Removes new lines and tags from a string.\r\n *\r\n * @param text String to conver\r\n * @return Converted string\r\n */\r\nexport function plainText(text) {\r\n return text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\r\n}\r\n/**\r\n * ============================================================================\r\n * TYPE CONVERSION FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts numeric value into string. Deals with large or small numbers that\r\n * would otherwise use exponents.\r\n *\r\n * @param value Numeric value\r\n * @return Numeric value as string\r\n */\r\nexport function numberToString(value) {\r\n // TODO handle Infinity and -Infinity\r\n if ($type.isNaN(value)) {\r\n return \"NaN\";\r\n }\r\n if (value === Infinity) {\r\n return \"Infinity\";\r\n }\r\n if (value === -Infinity) {\r\n return \"-Infinity\";\r\n }\r\n // Negative 0\r\n if ((value === 0) && (1 / value === -Infinity)) {\r\n return \"-0\";\r\n }\r\n // Preserve negative and deal with absoute values\r\n var negative = value < 0;\r\n value = Math.abs(value);\r\n // TODO test this\r\n var parsed = $type.getValue(/^([0-9]+)(?:\\.([0-9]+))?(?:e[\\+\\-]([0-9]+))?$/.exec(\"\" + value));\r\n var digits = parsed[1];\r\n var decimals = parsed[2] || \"\";\r\n var res;\r\n // Leave the nummber as it is if it does not use exponents\r\n if (parsed[3] == null) {\r\n res = (decimals === \"\" ? digits : digits + \".\" + decimals);\r\n }\r\n else {\r\n var exponent = +parsed[3];\r\n // Deal with decimals\r\n if (value < 1) {\r\n var zeros = exponent - 1;\r\n res = \"0.\" + $string.repeat(\"0\", zeros) + digits + decimals;\r\n // Deal with integers\r\n }\r\n else {\r\n var zeros = exponent - decimals.length;\r\n if (zeros === 0) {\r\n res = digits + decimals;\r\n }\r\n else if (zeros < 0) {\r\n res = digits + decimals.slice(0, zeros) + \".\" + decimals.slice(zeros);\r\n }\r\n else {\r\n res = digits + decimals + $string.repeat(\"0\", zeros);\r\n }\r\n }\r\n }\r\n return negative ? \"-\" + res : res;\r\n}\r\n/**\r\n * Converts anything to Date object.\r\n *\r\n * @param value A value of any type\r\n * @return Date object representing a value\r\n */\r\nexport function anyToDate(value) {\r\n if ($type.isDate(value)) {\r\n // TODO maybe don't create a new Date ?\r\n var date = new Date(value);\r\n // This is needed because IE does not copy over milliseconds\r\n date.setMilliseconds(value.getMilliseconds());\r\n return date;\r\n }\r\n else if ($type.isNumber(value)) {\r\n return new Date(value);\r\n }\r\n else {\r\n // Try converting to number (assuming timestamp)\r\n var num = Number(value);\r\n if (!$type.isNumber(num)) {\r\n return new Date(value);\r\n }\r\n else {\r\n return new Date(num);\r\n }\r\n }\r\n}\r\n/**\r\n * Tries converting any value to a number.\r\n *\r\n * @param value Source value\r\n * @return Number\r\n */\r\nexport function anyToNumber(value) {\r\n if ($type.isDate(value)) {\r\n return value.getTime();\r\n }\r\n else if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n else if ($type.isString(value)) {\r\n // Try converting to number (assuming timestamp)\r\n var num = Number(value);\r\n if (!$type.isNumber(num)) {\r\n // Failing\r\n return undefined;\r\n }\r\n else {\r\n return num;\r\n }\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * DATE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns a year day.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year day\r\n * @todo Account for UTC\r\n */\r\nexport function getYearDay(date, utc) {\r\n if (utc === void 0) { utc = false; }\r\n var start = new Date(date.getFullYear(), 0, 0);\r\n var diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\r\n var oneDay = 1000 * 60 * 60 * 24;\r\n return Math.floor(diff / oneDay);\r\n}\r\n/**\r\n * Returns week number for a given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number\r\n * @todo Account for UTC\r\n */\r\nexport function getWeek(date, _utc) {\r\n if (_utc === void 0) { _utc = false; }\r\n var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n var day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n var firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\r\n}\r\n/**\r\n * Returns a week number in the month.\r\n *\r\n * @param date Source Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number in month\r\n */\r\nexport function getMonthWeek(date, utc) {\r\n if (utc === void 0) { utc = false; }\r\n var firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\r\n var currentWeek = getWeek(date, utc);\r\n if (currentWeek == 1) {\r\n currentWeek = 53;\r\n }\r\n return currentWeek - firstWeek + 1;\r\n}\r\n/**\r\n * Returns a year day out of the given week number.\r\n *\r\n * @param week Week\r\n * @param year Year\r\n * @param weekday Weekday\r\n * @param utc Assume UTC dates\r\n * @return Day in a year\r\n */\r\nexport function getDayFromWeek(week, year, weekday, utc) {\r\n if (weekday === void 0) { weekday = 1; }\r\n if (utc === void 0) { utc = false; }\r\n var date = new Date(year, 0, 4, 0, 0, 0, 0);\r\n if (utc) {\r\n date.setUTCFullYear(year);\r\n }\r\n var day = week * 7 + weekday - ((date.getDay() || 7) + 3);\r\n return day;\r\n}\r\n/**\r\n * Returns 12-hour representation out of the 24-hour hours.\r\n *\r\n * @param hours 24-hour number\r\n * @return 12-hour number\r\n */\r\nexport function get12Hours(hours, base) {\r\n if (hours > 12) {\r\n hours -= 12;\r\n }\r\n else if (hours === 0) {\r\n hours = 12;\r\n }\r\n return $type.hasValue(base) ? hours + (base - 1) : hours;\r\n}\r\n/**\r\n * Returns a string name of the tome zone.\r\n *\r\n * @param date Date object\r\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\r\n * @param savings Include information if it's in daylight savings mode\r\n * @param utc Assume UTC dates\r\n * @return Time zone name\r\n */\r\nexport function getTimeZone(date, long, savings, utc) {\r\n if (long === void 0) { long = false; }\r\n if (savings === void 0) { savings = false; }\r\n if (utc === void 0) { utc = false; }\r\n if (utc) {\r\n return long ? \"Coordinated Universal Time\" : \"UTC\";\r\n }\r\n var wotz = date.toLocaleString(\"UTC\");\r\n var wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\r\n //wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\r\n if (savings === false) {\r\n wtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\r\n }\r\n return wtz;\r\n}\r\n/**\r\n * ============================================================================\r\n * NUMBER-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns a random number between `from` and `to`.\r\n *\r\n * @param from From number\r\n * @param to To number\r\n * @return Random number\r\n */\r\nexport function random(from, to) {\r\n return Math.floor(Math.random() * (to - from)) + from;\r\n}\r\n/**\r\n * Fits the number into specific `min` and `max` bounds.\r\n *\r\n * @param value Input value\r\n * @param min Minimum value\r\n * @param max Maximum value\r\n * @return Possibly adjusted value\r\n */\r\nexport function fitNumber(value, min, max) {\r\n if (value > max) {\r\n return max;\r\n }\r\n else if (value < min) {\r\n return min;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Fits the number into specific `min` and `max` bounds.\r\n *\r\n * If the value is does not fit withing specified range, it \"wraps\" around the\r\n * values.\r\n *\r\n * For example, if we have input value 10 with min set at 1 and max set at 8,\r\n * the value will not fit. The remainder that does not fit (2) will be added\r\n * to `min`, resulting in 3.\r\n *\r\n * The output of regular `fitNumber()` would return 8 instead.\r\n *\r\n * @param value Input value\r\n * @param min Minimum value\r\n * @param max Maximum value\r\n * @return Possibly adjusted value\r\n */\r\nexport function fitNumberRelative(value, min, max) {\r\n var gap = max - min;\r\n if (value > max) {\r\n value = min + (value - gap * Math.floor(value / gap));\r\n }\r\n else if (value < min) {\r\n value = min + (value - gap * Math.floor(value / gap));\r\n }\r\n return value;\r\n}\r\n/**\r\n * ============================================================================\r\n * SPRITE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts SVG element coordinates to coordinates within specific [[Sprite]].\r\n *\r\n * @param point SVG coordinates\r\n * @param sprite Sprite\r\n * @return Sprite coordinates\r\n */\r\nexport function svgPointToSprite(point, sprite) {\r\n var x = point.x;\r\n var y = point.y;\r\n var sprites = [];\r\n if (sprite) {\r\n while ($type.hasValue(sprite.parent)) {\r\n sprites.push(sprite);\r\n sprite = sprite.parent;\r\n }\r\n sprites.reverse();\r\n for (var i = 0; i < sprites.length; i++) {\r\n var sprite_1 = sprites[i];\r\n var angle = sprite_1.rotation;\r\n var relativeX = x - sprite_1.pixelX - sprite_1.ex;\r\n var relativeY = y - sprite_1.pixelY - sprite_1.ey;\r\n if (sprite_1.dx) {\r\n x -= sprite_1.dx;\r\n }\r\n if (sprite_1.dy) {\r\n y -= sprite_1.dy;\r\n }\r\n var scale = sprite_1.scale;\r\n // this handles nonscaling\r\n if (sprite_1.group) {\r\n scale = sprite_1.group.scale;\r\n }\r\n x = ($math.cos(-angle) * relativeX - $math.sin(-angle) * relativeY) / scale - sprite_1.pixelPaddingLeft;\r\n y = ($math.cos(-angle) * relativeY + $math.sin(-angle) * relativeX) / scale - sprite_1.pixelPaddingTop;\r\n }\r\n }\r\n return { x: x, y: y };\r\n}\r\n/**\r\n * Converts coordinates within [[Sprite]] to coordinates relative to the whole\r\n * SVG element.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @return SVG coordinates\r\n */\r\nexport function spritePointToSvg(point, sprite) {\r\n var x = point.x;\r\n var y = point.y;\r\n if (sprite) {\r\n while ($type.hasValue(sprite.parent)) {\r\n var angle = sprite.rotation;\r\n x += sprite.pixelPaddingLeft + sprite.ex;\r\n y += sprite.pixelPaddingTop + sprite.ey;\r\n var scale = sprite.scale;\r\n // this handles nonscaling\r\n if (sprite.group) {\r\n scale = sprite.group.scale;\r\n }\r\n var relativeX = sprite.pixelX + ((x * $math.cos(angle) - y * $math.sin(angle))) * scale;\r\n var relativeY = sprite.pixelY + ((x * $math.sin(angle) + y * $math.cos(angle))) * scale;\r\n if (sprite.dx) {\r\n relativeX += sprite.dx;\r\n }\r\n if (sprite.dy) {\r\n relativeY += sprite.dy;\r\n }\r\n x = relativeX;\r\n y = relativeY;\r\n sprite = sprite.parent;\r\n }\r\n }\r\n return { x: x, y: y };\r\n}\r\n/**\r\n * Converts coordinates of one sprite to another.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @param toSprite Sprite\r\n * @return converted coordinates\r\n */\r\nexport function spritePointToSprite(point, sprite, toSprite) {\r\n return svgPointToSprite(spritePointToSvg(point, sprite), toSprite);\r\n}\r\n/**\r\n * Converts a rectangle expressed in SVG element coordinates to coordinates\r\n * within specific [[Sprite]].\r\n *\r\n * @param rect SVG rectangle\r\n * @param sprite Sprite\r\n * @return Sprite rectangle\r\n */\r\nexport function svgRectToSprite(rect, sprite) {\r\n var p1 = svgPointToSprite(rect, sprite);\r\n var p2 = svgPointToSprite({ x: rect.x + rect.width, y: rect.y + rect.height }, sprite);\r\n return { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };\r\n}\r\n/**\r\n * Converts a rectangle expressed in [[Sprite]] coordinates to SVG coordinates.\r\n *\r\n * @param rect Sprite rectangle\r\n * @param sprite Sprite\r\n * @return SVG rectangle\r\n */\r\nexport function spriteRectToSvg(rect, sprite) {\r\n var p1 = spritePointToSvg(rect, sprite);\r\n var p2 = spritePointToSvg({ x: rect.x + rect.width, y: rect.y + rect.height }, sprite);\r\n return { x: p1.x, y: p1.y, width: p2.x - p1.x, height: p2.y - p1.y };\r\n}\r\n/**\r\n * Converts global document-wide coordinates to coordinates within SVG element.\r\n *\r\n * @param point Global coordinates\r\n * @param svgContainer SVG element\r\n * @return SVG coordinates\r\n */\r\nexport function documentPointToSvg(point, svgContainer, cssScale) {\r\n try {\r\n var bbox = svgContainer.getBoundingClientRect();\r\n if (!$type.isNumber(cssScale)) {\r\n cssScale = 1;\r\n }\r\n return {\r\n \"x\": (point.x - bbox.left) / cssScale,\r\n \"y\": (point.y - bbox.top) / cssScale\r\n };\r\n }\r\n catch (e) {\r\n return point;\r\n }\r\n}\r\n/**\r\n * Converts SVG coordinates to global document-wide coordinates.\r\n *\r\n * @param point SVG coordinates\r\n * @param svgContainer SVG element\r\n * @return Global coordinates\r\n */\r\nexport function svgPointToDocument(point, svgContainer) {\r\n try {\r\n var bbox = svgContainer.getBoundingClientRect();\r\n return {\r\n \"x\": point.x + bbox.left,\r\n \"y\": point.y + bbox.top\r\n };\r\n }\r\n catch (e) {\r\n return point;\r\n }\r\n}\r\n/**\r\n * Converts document-wide global coordinates to coordinates within specific\r\n * [[Sprite]].\r\n *\r\n * @param point Global coordinates\r\n * @param sprite Sprite\r\n * @return Sprite coordinates\r\n */\r\nexport function documentPointToSprite(point, sprite) {\r\n if (sprite && sprite.htmlContainer) {\r\n var svgPoint = documentPointToSvg(point, $type.getValue(sprite.htmlContainer), sprite.svgContainer.cssScale);\r\n return svgPointToSprite(svgPoint, sprite);\r\n }\r\n else {\r\n return point;\r\n }\r\n}\r\n/**\r\n * Converts coordinates within [[Sprite]] to global document coordinates.\r\n *\r\n * @param point Sprite coordinates\r\n * @param sprite Sprite\r\n * @return Global coordinates\r\n */\r\nexport function spritePointToDocument(point, sprite) {\r\n if (sprite && sprite.htmlContainer) {\r\n var svgPoint = spritePointToSvg(point, sprite);\r\n return svgPointToDocument(svgPoint, $type.getValue(sprite.htmlContainer));\r\n }\r\n else {\r\n return point;\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * DEPRECATED FUNCTIONS\r\n * @todo Review and remove\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns element's width.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Width (px)\r\n * @deprecated Not used anywhere\r\n */\r\nexport function width(element) {\r\n var cs = getComputedStyle(element);\r\n var paddingX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight);\r\n var borderX = parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth);\r\n return element.clientWidth - paddingX - borderX;\r\n}\r\n/**\r\n * Returns element's height.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @return Height (px)\r\n * @deprecated Not used anywhere\r\n */\r\nexport function height(element) {\r\n var cs = getComputedStyle(element);\r\n var paddingY = parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom);\r\n var borderY = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth);\r\n return element.clientHeight - paddingY - borderY;\r\n}\r\n/**\r\n * Returns number of decimals\r\n *\r\n * @ignore Exclude from docs\r\n * @param number Input number\r\n * @return Number of decimals\r\n */\r\nexport function decimalPlaces(number) {\r\n var match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n if (!match) {\r\n return 0;\r\n }\r\n return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\r\n}\r\nvar urlRegexp = /^([a-zA-Z][a-zA-Z0-9\\+\\.\\-]*:)?(?:(\\/\\/)([^\\@]+\\@)?([^\\/\\?\\#\\:]*)(\\:[0-9]+)?)?([^\\?\\#]*)(\\?[^\\#]*)?(\\#.*)?$/;\r\n/**\r\n * Parses a URL\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n// TODO test this\r\nexport function parseUrl(url) {\r\n var match = urlRegexp.exec(url);\r\n return {\r\n protocol: (match && match[1]) || \"\",\r\n separator: (match && match[2]) || \"\",\r\n authority: (match && match[3]) || \"\",\r\n domain: (match && match[4]) || \"\",\r\n port: (match && match[5]) || \"\",\r\n path: (match && match[6]) || \"\",\r\n query: (match && match[7]) || \"\",\r\n hash: (match && match[8]) || \"\"\r\n };\r\n}\r\n/**\r\n * Serializes a Url into a string\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function serializeUrl(url) {\r\n return url.protocol + url.separator + url.authority + url.domain + url.port + url.path + url.query + url.hash;\r\n}\r\n/**\r\n * Checks whether a Url is relative or not\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n// TODO is this correct ?\r\nfunction isRelativeUrl(url) {\r\n return url.protocol === \"\" &&\r\n url.separator === \"\" &&\r\n url.authority === \"\" &&\r\n url.domain === \"\" &&\r\n url.port === \"\";\r\n}\r\n/**\r\n * Joins together two URLs, resolving relative URLs correctly\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n// TODO test this\r\nexport function joinUrl(left, right) {\r\n var parsedLeft = parseUrl(left);\r\n var parsedRight = parseUrl(right);\r\n if (isRelativeUrl(parsedLeft)) {\r\n throw new Error(\"Left URL is not absolute\");\r\n }\r\n if (isRelativeUrl(parsedRight)) {\r\n // TODO is this correct ?\r\n if (parsedRight.path !== \"\") {\r\n if (parsedRight.path[0] === \"/\") {\r\n parsedLeft.path = parsedRight.path;\r\n // TODO is this correct ?\r\n }\r\n else {\r\n var leftPath = parsedLeft.path.split(/\\//);\r\n var rightPath = parsedRight.path.split(/\\//);\r\n // TODO is this correct ?\r\n if (leftPath.length === 0) {\r\n if (rightPath.length !== 0) {\r\n leftPath.push(\"\");\r\n }\r\n }\r\n else if (leftPath.length > 1) {\r\n leftPath.pop();\r\n }\r\n $array.pushAll(leftPath, rightPath);\r\n parsedLeft.path = leftPath.join(\"/\");\r\n if (parsedLeft.path !== \"\" && parsedLeft.path[0] !== \"/\") {\r\n throw new Error(\"URL path must start with /\");\r\n }\r\n }\r\n }\r\n // TODO is this correct ?\r\n parsedLeft.query = parsedRight.query;\r\n parsedLeft.hash = parsedRight.hash;\r\n return serializeUrl(parsedLeft);\r\n }\r\n else {\r\n return serializeUrl(parsedRight);\r\n }\r\n}\r\n/**\r\n * Detects MSIE.\r\n *\r\n * @return Is IE?\r\n */\r\nexport function isIE() {\r\n return !!window.MSInputMethodContext && !!document.documentMode;\r\n}\r\n//# sourceMappingURL=Utils.js.map","/**\r\n * This module defines a [[Validatable]] class which can be used by all\r\n * non-[[Sprite]] classes to use system beats to revalidate themselves.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { registry } from \"../Registry\";\r\n/**\r\n * This module defines a [[Validatable]] class which can be used by all\r\n * non-[[Sprite]] classes to use system update cycle to revalidate themselves.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nvar Validatable = /** @class */ (function (_super) {\r\n __extends(Validatable, _super);\r\n function Validatable() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /**\r\n * Is invalid and should be revalidated?\r\n */\r\n _this._validateDisposer = null;\r\n return _this;\r\n }\r\n /**\r\n * Invalidates the element, so that it can re-validate/redraw itself in the\r\n * next cycle.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Validatable.prototype.invalidate = function () {\r\n if (this._validateDisposer === null) {\r\n this._validateDisposer = registry.events.on(\"exitframe\", this.validate, this);\r\n }\r\n };\r\n /**\r\n * Validates itself.\r\n *\r\n * Most probably the extending class will have an overriding `validate()`\r\n * method which will do actual work, as well as call this method using\r\n * `super.validate()`.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Validatable.prototype.validate = function () {\r\n if (this._validateDisposer !== null) {\r\n this._validateDisposer.dispose();\r\n this._validateDisposer = null;\r\n }\r\n };\r\n Validatable.prototype.dispose = function () {\r\n if (this._validateDisposer !== null) {\r\n this._validateDisposer.dispose();\r\n this._validateDisposer = null;\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n return Validatable;\r\n}(BaseObjectEvents));\r\nexport { Validatable };\r\n//# sourceMappingURL=Validatable.js.map","import { is } from \"../core/Registry\";\r\nvar theme = function (object) {\r\n if (is(object, \"SpriteState\")) {\r\n object.transitionDuration = 400;\r\n }\r\n if (is(object, \"Component\")) {\r\n object.rangeChangeDuration = 500;\r\n object.interpolationDuration = 500;\r\n object.sequencedInterpolation = false;\r\n if (is(object, \"SankeyDiagram\")) {\r\n object.sequencedInterpolation = true;\r\n }\r\n if (is(object, \"FunnelSeries\")) {\r\n object.sequencedInterpolation = true;\r\n }\r\n }\r\n if (is(object, \"Chart\")) {\r\n object.defaultState.transitionDuration = 2000;\r\n object.hiddenState.transitionDuration = 1000;\r\n }\r\n if (is(object, \"Tooltip\")) {\r\n object.animationDuration = 400;\r\n object.defaultState.transitionDuration = 400;\r\n object.hiddenState.transitionDuration = 400;\r\n }\r\n if (is(object, \"Scrollbar\")) {\r\n object.animationDuration = 500;\r\n }\r\n if (is(object, \"Series\")) {\r\n object.defaultState.transitionDuration = 1000;\r\n object.hiddenState.transitionDuration = 700;\r\n object.hiddenState.properties.opacity = 1;\r\n object.showOnInit = true;\r\n }\r\n if (is(object, \"MapSeries\")) {\r\n object.hiddenState.properties.opacity = 0;\r\n }\r\n if (is(object, \"PercentSeries\")) {\r\n object.hiddenState.properties.opacity = 0;\r\n }\r\n if (is(object, \"FunnelSlice\")) {\r\n object.defaultState.transitionDuration = 800;\r\n object.hiddenState.transitionDuration = 1000;\r\n object.hiddenState.properties.opacity = 1;\r\n }\r\n if (is(object, \"Slice\")) {\r\n object.defaultState.transitionDuration = 700;\r\n object.hiddenState.transitionDuration = 1000;\r\n object.hiddenState.properties.opacity = 1;\r\n }\r\n if (is(object, \"Preloader\")) {\r\n object.hiddenState.transitionDuration = 2000;\r\n }\r\n if (is(object, \"Column\")) {\r\n object.defaultState.transitionDuration = 700;\r\n object.hiddenState.transitionDuration = 1000;\r\n object.hiddenState.properties.opacity = 1;\r\n }\r\n if (is(object, \"Column3D\")) {\r\n object.hiddenState.properties.opacity = 0;\r\n }\r\n};\r\nexport default theme;\r\n//# sourceMappingURL=animated.js.map","import { is } from \"../core/Registry\";\r\nimport { color } from \"../core/utils/Color\";\r\nvar theme = function (object) {\r\n if (is(object, \"InterfaceColorSet\")) {\r\n object.setFor(\"stroke\", color(\"#000000\"));\r\n object.setFor(\"fill\", color(\"#2b2b2b\"));\r\n object.setFor(\"primaryButton\", color(\"#6794dc\").lighten(-0.2));\r\n object.setFor(\"primaryButtonHover\", color(\"#6771dc\").lighten(-0.2));\r\n object.setFor(\"primaryButtonDown\", color(\"#68dc75\").lighten(-0.2));\r\n object.setFor(\"primaryButtonActive\", color(\"#68dc75\").lighten(-0.2));\r\n object.setFor(\"primaryButtonText\", color(\"#FFFFFF\"));\r\n object.setFor(\"primaryButtonStroke\", color(\"#6794dc\"));\r\n object.setFor(\"secondaryButton\", color(\"#3b3b3b\"));\r\n object.setFor(\"secondaryButtonHover\", color(\"#3b3b3b\").lighten(0.1));\r\n object.setFor(\"secondaryButtonDown\", color(\"#3b3b3b\").lighten(0.15));\r\n object.setFor(\"secondaryButtonActive\", color(\"#3b3b3b\").lighten(0.15));\r\n object.setFor(\"secondaryButtonText\", color(\"#bbbbbb\"));\r\n object.setFor(\"secondaryButtonStroke\", color(\"#3b3b3b\").lighten(-0.2));\r\n object.setFor(\"grid\", color(\"#bbbbbb\"));\r\n object.setFor(\"background\", color(\"#000000\"));\r\n object.setFor(\"alternativeBackground\", color(\"#ffffff\"));\r\n object.setFor(\"text\", color(\"#ffffff\"));\r\n object.setFor(\"alternativeText\", color(\"#000000\"));\r\n object.setFor(\"disabledBackground\", color(\"#bbbbbb\"));\r\n }\r\n if (is(object, \"Scrollbar\")) {\r\n object.background.fillOpacity = 0.4;\r\n object.thumb.background.fillOpacity = 0.5;\r\n }\r\n};\r\nexport default theme;\r\n//# sourceMappingURL=dark.js.map"],"names":["GlobalAdapter","this","_callbackId","_callbacks","left","right","priority","id","prototype","addAll","type","key","callback","scope","insert","isEnabled","values","x","applyAll","value","callbacks","length","i","item","call","globalAdapter","Adapter","c","_disabled","object","events","add","has","iterator","remove","_this","enableKey","disableKey","amount","Infinity","_hasListenersByType","_shouldDispatch","count","apply","length_1","keys","copyFrom","source","val","clear","getProgressNumber","progress","from","to","getProgressPercent","percent","getProgressColor","color","rgb","alpha","getHybridProperty","property","charAt","toUpperCase","substr","AnimationDisposer","array","_disposer","dispose","isDisposed","Animation","_super","animationOptions","duration","easing","_loop","_pause","_delayTimeout","_time","_isFinished","className","applyTheme","debug","pause","delay","animations","id_1","setTimeout","start","clearTimeout","_start","removeDispose","stopSameAnimations","_startTime","Date","now","staticOptions","options_1","childObject","push","updateMethod","convertedFrom","isNaN","applyStaticOptions","event_1","target","dispatchImmediately","update","end","loop","resume","setProgress","event_2","stop","kill","isFinished","options","skipEvent","event_3","event_4","timeProgress","Object","defineProperty","get","enumerable","configurable","animation","delayed","killed_1","newOptions","oldOptions","asFunction","field","asIs","indexOf","any","test","map","fn","output","Array","each","eachReverse","eachContinue","shiftLeft","index","pushAll","input","element","found","splice","move","toIndex","removeIndex","insertIndex","unshift","replace","ind","toArray","isArray","copy","getSortedIndex","ordering","pivot","order","findIndex","matches","find","keepIf","keep","pendingFrame","nextQueue","readQueue","writeQueue","idleQueue","fps","raf","requestAnimationFrame","frameLoop","pendFrame","readFrame","writeFrame","whenIdle","triggerIdle","shift","isSafari","navigator","vendor","isInternetExplorer","userAgent","Cache","_storage","ttl","set","owner","ownerStorage","insertKeyIfEmpty","getTime","setKey","undefined","hasKey","getKey","cacheItem","touched","expired","removeKey","cache","Color","_value","a","_lightColor","r","g","b","_darkColor","toString","rgba","hex","lighten","brighten","saturate","saturation","darkColor","lightColor","Error","cacheId","cached","isColor","castColor","toColor","ColorSet","_list","_currentStep","_startIndex","_currentPass","baseColor","stepOptions","passOptions","step","minColors","minLightness","maxLightness","shuffle","wrap","reuse","generate","reset","getReusableColor","list","tmpstep","Math","floor","next","getIndex","curColor","currentColor","hsl","hueStep","hue","mods","h","lightness","l","s","hues","startIndex","sort","random","applyStepOptions","base","pass","processConfig","config","len","namedColors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","hexToRgb","match","rgbaToRgb","shorthandRegex","m","result","exec","parseInt","hexToRgbWithAlpha","parseFloat","rgbToHex","pad2","rgbToRGBA","interpolate","rgb1","rgb2","round","max","min","getLightnessStep","rgbToHsl","hslToRgb","hue2rgb","p","q","t","d","isLight","rootStylesheet","SVGNS","XMLNS","XLINK","addEventListener","dom","listener","removeEventListener","getElement","el","e","document","getElementById","getElementsByClassName","HTMLElement","addClass","classList","classes","split","name","currentClassName","getAttribute","setAttribute","filter","join","removeClass","setStyle","style","getComputedStyle","currentStyle","defaultView","getPropertyValue","blur","activeElement","body","createElement","position","top","appendChild","focus","removeChild","contains","cursor","parentNode","host","getShadowRoot","getRoot","ownerDocument","eventTarget","event","composedPath","fixPixelPerfect","rect","getBoundingClientRect","left_1","top_1","getStylesheet","head","sheet","appendStylesheet","root","selector","cssRules","insertRule","StyleRule","styles","_rule","deleteRule","selectorText","_setVendorPrefixName","setProperty","styleId","StyleClass","_className","ready","f","readyState","listener_1","findFont","font","parent_1","parentElement","findFontSize","parent_2","isElementInViewport","viewportTarget","targets","viewportRect","height","width","window","innerHeight","documentElement","clientHeight","innerWidth","clientWidth","DictionaryDisposer","dict","disposer","on","oldValue","v","Dictionary","_dictionary","insertKey","newValue","updateKey","ifEmpty","Symbol","_a","_b","_i","_c","label","sent","sortedIterator","y","DictionaryTemplate","template","_template","isTemplate","clone","create","Disposer","_disposed","_dispose","MultiDisposer","disposers","MutableValueDisposer","CounterDisposer","arguments","_counter","increment","linear","quadIn","quadOut","quadInOut","polyIn","pow","polyOut","polyInOut","polyIn3","polyOut3","polyInOut3","expIn","expOut","expInOut","sinIn","cos","sinOut","sin","sinInOut","cubicIn","cubicOut","cubicInOut","circleIn","sqrt","circleOut","circleInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceIn","bounceOut","bounceInOut","tau","PI","amplitude","period","asin","elasticIn","elasticOut","elasticInOut","EventDispatcher","_listeners","_killed","_iterating","_enabled","hasListeners","hasListenersByType","killed","enable","disable","enableType","disableType","_removeListener","_removeExistingListener","once","context","_eachListener","info","dispatch","_on","shouldClone","onAll","off","TargetedEventDispatcher","createChild","htmlElement","classType","htmlContainer","tmpContainer","visibility","innerHTML","svgDiv_1","paper","SVGContainer","container_1","svgContainer","background","fillOpacity","append","group","moveHtmlContainer","relativeWidth","relativeHeight","container","sprite_1","topParent","uid","baseId","isBaseSprite","focusFilter","maskRectangle","previousWidth","previousHeight","deepInvalidate","loopTimer_1","loop_1","addDisposer","tooltipContainer_1","isMeasured","tooltipContainer","tooltip","hide","setBounds","maxWidth","maxHeight","preloader_1","__disabled","preloader","hasLicense","logo_1","ev","isHidden","isHiding","show","logo","align","valign","numberFormatter","isStandaloneInstance","addToQueue","viewPortHandler","vpDisposer","sprite","queueHandler","removeFromQueue","nextSprite","showOnInit","invalidateLabels","invalidateLayout","invalidateData","reinit","appear","classError","chart","raiseCriticalError","useTheme","InterfaceColorSet","_purposes","stroke","fill","primaryButton","primaryButtonHover","primaryButtonDown","primaryButtonActive","primaryButtonText","primaryButtonStroke","secondaryButton","secondaryButtonHover","secondaryButtonDown","secondaryButtonActive","secondaryButtonText","secondaryButtonStroke","grid","alternativeBackground","text","alternativeText","disabledBackground","positive","negative","getFor","purpose","setFor","fromArray","iter","sum","_","concat","args","go","push2","flatten","indexed","ListIterator","createNewItems","_create","_listCopy","getFirst","returnItem","getLast","removeItem","Keyboard","getEventKey","code","keyCode","which","isKey","eventKey","shiftKey","ctrlKey","altKey","metaKey","keyboard","Language","adapter","_locale","_defaultLocale","locale","getLocale","translate","prompt","rest","translation","translations","getTranslations","translateAny","setTranslationAny","localeTarget","translateEmpty","translateFunc","translateAll","isDefault","IndexedIterable","_array","_end","backwards","range","diff","ListDisposer","ListGrouper","_getKey","_insert","_remove","_keys","_groups","_sort","index_1","disposeOnRemove","disposer_1","checkBounds","List","initial","_values","removeValue","hasIndex","setIndex","_sortQuicksort","low","high","_sortPartition","j","swap","value_a","value_b","moveValue","pop","setAll","newArray","oldArray","ListTemplate","make","out","log","messages","console","warn","HALFPI","RADIANS","DEGREES","toNumberRange","fitToRange","precision","rounded","ceil","minValue","maxValue","temp","closest","referenceValue","reduce","prev","curr","abs","intersect","range1","range2","start1","start2","end1","end2","invertRange","intersection","startMax","endMin","getDistance","point1","point2","getHorizontalDistance","getVerticalDistance","getCubicCurveDistance","controlPointA","controlPointB","stepCount","distance","prevPoint","point","getPointOnCubicCurve","getScale","startPoint1","startPoint2","initialDistance","currentDistance","getMidPoint","getAngle","diffX","diffY","angle","atan2","normalizeAngle","getBBox","points","bottom","getCommonRectangle","rectangles","minX","minY","maxX","maxY","rectangle","getPointOnQuadraticCurve","pointA","pointB","controlPoint","mt1","mt2","mt3","getCubicControlPointA","p0","p1","p2","p3","tensionX","tensionY","adjustTension","getCubicControlPointB","tension","fitAngleToRange","startAngle","endAngle","maxEnd","maxStart","getArcRect","radius","Number","MAX_VALUE","bpoints","getArcPoint","fromAngle","toAngle","pt","arc","isInRectangle","Morpher","morphable","_bboxes","morphDuration","morphEasing","morphToSingle","scaleRatio","morphToPolygon","toPoints","currentPoints","sortPoints","_morphFromPointsReal","_morphToPointsReal","normalizePoints","_disposers","pointsA","pointsB","surfaceA","holeA","bboxA","middleX","middleY","addPoints","splitAt","newDistance","partA","slice","partB","bbox1","bbox2","bboxes","surface","morphToCircle","commonBBox","hole","fromPoints","bbox","realRadius","realAngle","pointOnCircle","i_1","hlen","mustHaveCount","addToSegmentCount","newPoints","point0","extraPoint","lastPoint","morphToRectangle","realWidth","realHeight","i_2","i_3","_morphProgress","currentArea","surfaceFrom","holeFrom","surfaceTo","holeTo","currentSurface","i_4","slen","currentPoint","currentHole","i_5","morphBack","_animations","load","url","Promise","success","error","isBlob","responseType","xhr","XMLHttpRequest","onload","status","blob_1","response","readBlob","then","blob","getResponseHeader","responseText","onerror","open","withCredentials","requestHeaders","header","setRequestHeader","send","reader","FileReader","readAsText","entries","keysOrdered","hasOwnProperty","eachOrdered","ord","merge","object1","object2","assign","JSON","parse","stringify","copyProperties","forceCopyProperties","copyAllProperties","reverse","or","PatternSet","interfaceColors","getLinePattern","getRectPattern","getCirclePattern","size","rotation","thickness","gap","strokeDashArray","pattern","strokeDasharray","strokeWidth","outline","R","rectWidth","rectHeight","shapeRendering","C","currentStep","generatePatterns","Percent","isPercent","Plugin","init","Native","_targets","_observer","ResizeObserver","entry","addTarget","observe","box","removeTarget","unobserve","Raf","lastTime_1","currentTime","newSize","_timer","cancelAnimationFrame","observer","makeSensor","ResizeSensor","_sensor","_element","Responsive","_rules","_appliedRules","_appliedTargets","_useDefault","_responsiveDisposers","_noStates","rules","checkRules","_component","disposeResponsiveHandlers","component","isReady","enabled","applyRules","defaultRules","useDefault","isApplied","ruleId","rule","force","allRules","rulesChanged","pixelWidth","pixelHeight","relevant","hidden","_applyRules","_timeout","newTarget","defaultStateApplied","isApplied_1","state","getState","setState","getDefaultState","transitionDuration","setTargetState","children","child","stateId","tmpId","states","defaultState","properties","getValue","ResponsiveBreakpoints","widthXXS","XXS","widthXS","XS","widthS","S","widthM","M","widthL","L","widthXL","XL","widthXXL","XXL","heightXXS","heightXS","heightS","heightM","heightL","heightXL","heightXXL","isXXS","isXS","isS","isM","isL","isXL","isXXL","maybeXXS","maybeXS","maybeS","maybeM","maybeL","maybeXL","maybeXXL","OrderedList","findClosestIndex","direction","closestValue","closestDifference","closestIndex","difference","SortedList","_ordering","last","OrderedListTemplate","SortedListTemplate","repeat","string","chars","res","choice","STRING","NUMBER","DATE","DURATION","PLACEHOLDER","PLACEHOLDER2","timeUnitDurations","millisecond","second","minute","hour","day","week","month","year","getNextUnit","unit","getDuration","date","checkChange","dateOne","dateTwo","utc","timeZoneOffset1","timeZoneOffset2","getTimezoneOffset","setUTCMinutes","getUTCMinutes","changed","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCSeconds","nextUnit","timeZoneOffset","setUTCDate","seconds","setUTCSeconds","milliseconds","getUTCMilliseconds","setUTCMilliseconds","hours","setUTCHours","minutes","setUTCFullYear","setUTCMonth","wday","newTimeZoneOffset","firstDateOfWeek","firstDate","roundMinutes","timezone","setTimezone","unitCount","setTime","weekDay","getUTCDay","toLocaleString","timeZone","getTimezoneMinutes","setHours","d2","getMinutes","getType","castString","toBoolean","toNumber","hasValue","isNumber","converted","isString","toText","isObject","toNumberOrPercent","getValueDefault","defaultValue","isDate","used","stripHash","getBaseURI","baseURI","loc","location","href","softCopyProperties","isNotEmpty","relativeToValue","full","relativeRadiusToValue","subtractIfNegative","getPixelRatio","ratio","devicePixelRatio","capitalize","str","arr","escapeForRgex","splitTextByCharCount","maxChars","fullWords","rtl","fullWordFallback","currentIndex","tmpText","words","word","wordLength","reverseString","parts","RegExp","truncateWithEllipsis","ellipsis","lines","trim","rtrim","ltrim","padString","char","getFormat","format","toLowerCase","hints","cleanFormat","stripTags","plainText","numberToString","parsed","digits","decimals","exponent","zeros","anyToDate","setMilliseconds","getMilliseconds","num","anyToNumber","getYearDay","getFullYear","oneDay","getWeek","_utc","UTC","getMonth","getDate","firstDay","getMonthWeek","firstWeek","currentWeek","getDayFromWeek","weekday","getDay","get12Hours","getTimeZone","long","savings","wotz","wtz","timeZoneName","fitNumber","fitNumberRelative","svgPointToSprite","sprites","parent","relativeX","pixelX","ex","relativeY","pixelY","ey","dx","dy","scale","pixelPaddingLeft","pixelPaddingTop","spritePointToSvg","spritePointToSprite","toSprite","spriteRectToSvg","documentPointToSvg","cssScale","svgPointToDocument","documentPointToSprite","svgPoint","spritePointToDocument","cs","paddingX","paddingLeft","paddingRight","borderX","borderLeftWidth","borderRightWidth","paddingY","paddingTop","paddingBottom","borderY","borderTopWidth","borderBottomWidth","decimalPlaces","number","urlRegexp","parseUrl","protocol","separator","authority","domain","port","path","query","hash","serializeUrl","isRelativeUrl","joinUrl","parsedLeft","parsedRight","leftPath","rightPath","isIE","MSInputMethodContext","documentMode","Validatable","_validateDisposer","invalidate","validate","theme","is","rangeChangeDuration","interpolationDuration","sequencedInterpolation","hiddenState","animationDuration","opacity","thumb"],"sourceRoot":""}