{"version":3,"file":"js/chunk-vendors-87f3038d.635e9c33.js","mappings":"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","sources":["webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/ChordDiagram.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/FlowDiagram.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/GaugeChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/MapChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/PercentChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/PieChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/PieChart3D.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/RadarChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/SankeyDiagram.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/SerialChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/SlicedChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/TreeMap.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/XYChart.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/types/XYChart3D.js"],"sourcesContent":["/**\r\n * Chord diagram module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ChordDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(ChordDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ChordDiagramDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ChordDiagramDataItem;\r\n}(FlowDiagramDataItem));\r\nexport { ChordDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nvar ChordDiagram = /** @class */ (function (_super) {\r\n __extends(ChordDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * [valueAngle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n _this.valueAngle = 0;\r\n _this.className = \"ChordDiagram\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.radius = percent(80);\r\n _this.innerRadius = -15;\r\n _this.nodePadding = 5;\r\n var chordContainer = _this.chartContainer.createChild(Container);\r\n chordContainer.align = \"center\";\r\n chordContainer.valign = \"middle\";\r\n chordContainer.shouldClone = false;\r\n chordContainer.layout = \"absolute\";\r\n _this.chordContainer = chordContainer;\r\n _this.nodesContainer.parent = chordContainer;\r\n _this.linksContainer.parent = chordContainer;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.invalidate, _this, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Redraws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ChordDiagram.prototype.validate = function () {\r\n var _this = this;\r\n var chartContainer = this.chartContainer;\r\n var endAngle = this.endAngle;\r\n var startAngle = this.startAngle + this.nodePadding / 2;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n if (!$type.isNumber(maxRadius)) {\r\n maxRadius = 0;\r\n }\r\n var radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n var pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n var total = this.dataItem.values.value.sum;\r\n var count = 0;\r\n var newTotal = 0;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n _this.getNodeValue(node);\r\n count++;\r\n var value = node.total;\r\n if (node.total / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n newTotal += value;\r\n });\r\n this.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var slice = node.slice;\r\n slice.radius = radius;\r\n slice.innerRadius = pixelInnerRadius;\r\n var value = node.total;\r\n if (node.total / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n node.adjustedTotal = value;\r\n var arc;\r\n if (_this.nonRibbon) {\r\n arc = (endAngle - _this.startAngle) / count - _this.nodePadding;\r\n }\r\n else {\r\n arc = _this.valueAngle * value;\r\n }\r\n slice.arc = arc;\r\n slice.startAngle = startAngle;\r\n node.trueStartAngle = startAngle;\r\n node.parent = _this.nodesContainer;\r\n node.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n startAngle += arc + _this.nodePadding;\r\n });\r\n this.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n this.chordContainer.invalidateLayout();\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n ChordDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Chord diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n ChordDiagram.prototype.createDataItem = function () {\r\n return new ChordDiagramDataItem();\r\n };\r\n Object.defineProperty(ChordDiagram.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n * top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the radial axis start horizontally to\r\n * the right, as opposed to vertical.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n * where it has started, forming a full 360 circle. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to end the circle somewhere else.\r\n *\r\n * E.g. setting this to 180 will make the radar face end at horizontal line\r\n * to the left off the center.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the Radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the Chord nodes.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"nonRibbon\", {\r\n /**\r\n * @return Non-ribbon\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nonRibbon\");\r\n },\r\n /**\r\n *\r\n * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n *\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nonRibbon\", value, true);\r\n this.links.template.middleLine.strokeOpacity = 1;\r\n this.links.template.link.fillOpacity = 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n ChordDiagram.prototype.createNode = function () {\r\n var node = new ChordNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ChordDiagram.prototype.createLink = function () {\r\n var link = new ChordLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n return ChordDiagram;\r\n}(FlowDiagram));\r\nexport { ChordDiagram };\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[\"ChordDiagram\"] = ChordDiagram;\r\n//# sourceMappingURL=ChordDiagram.js.map","/**\r\n * FlowDiagram module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, ChartDataItem } from \"../Chart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { FlowDiagramNode } from \"../elements/FlowDiagramNode\";\r\nimport { FlowDiagramLink } from \"../elements/FlowDiagramLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[FlowDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar FlowDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(FlowDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"FlowDiagramDataItem\";\r\n _this.values.value = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"fromName\", {\r\n /**\r\n * @return name\r\n */\r\n get: function () {\r\n return this.properties.fromName;\r\n },\r\n /**\r\n * Source node's name.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"fromName\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"toName\", {\r\n /**\r\n * @return name\r\n */\r\n get: function () {\r\n return this.properties.toName;\r\n },\r\n /**\r\n * Destination node's name.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"toName\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"color\", {\r\n /**\r\n * @return color\r\n */\r\n get: function () {\r\n return this.properties.color;\r\n },\r\n /**\r\n * Node color\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"color\", toColor(value));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.value.value;\r\n },\r\n /**\r\n * Link's value.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"value\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"link\", {\r\n /**\r\n * A visual element, representing link between the source and target nodes.\r\n *\r\n * Link's actual thickness will be determined by `value` of this link and\r\n * `value` of the source node.\r\n *\r\n * @readonly\r\n * @return Link element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._link) {\r\n var link_1 = this.component.links.create();\r\n this._link = link_1;\r\n this.addSprite(link_1);\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.links.removeValue(link_1);\r\n }\r\n }));\r\n }\r\n return this._link;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FlowDiagramDataItem;\r\n}(ChartDataItem));\r\nexport { FlowDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Pie chart\r\n * @see {@link IFlowDiagramEvents} for a list of available Events\r\n * @see {@link IFlowDiagramAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar FlowDiagram = /** @class */ (function (_super) {\r\n __extends(FlowDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A Color Set to use when applying/generating colors for each subsequent\r\n * node.\r\n */\r\n _this.colors = new ColorSet();\r\n _this.className = \"FlowDiagram\";\r\n _this.nodePadding = 20;\r\n _this.sortBy = \"none\";\r\n _this.sequencedInterpolation = true;\r\n _this.colors.step = 2;\r\n _this.minNodeSize = 0.02;\r\n var linksContainer = _this.chartContainer.createChild(Container);\r\n linksContainer.shouldClone = false;\r\n linksContainer.layout = \"none\";\r\n linksContainer.isMeasured = false;\r\n _this.linksContainer = linksContainer;\r\n var nodesContainer = _this.chartContainer.createChild(Container);\r\n nodesContainer.shouldClone = false;\r\n nodesContainer.layout = \"none\";\r\n nodesContainer.isMeasured = false;\r\n _this.nodesContainer = nodesContainer;\r\n // this data item holds sums, averages, etc\r\n _this.dataItem = _this.createDataItem();\r\n _this.dataItem.component = _this;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n FlowDiagram.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.dataItem.dispose();\r\n };\r\n /**\r\n * (Re)validates chart's data, effectively causing the chart to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagram.prototype.validateData = function () {\r\n var _this = this;\r\n if (this._parseDataFrom == 0) {\r\n this.nodes.clear();\r\n }\r\n this.sortNodes();\r\n this.colors.reset();\r\n _super.prototype.validateData.call(this);\r\n var sum = 0;\r\n var count = 0;\r\n var low;\r\n var high;\r\n // build blocks\r\n $iter.each(this.dataItems.iterator(), function (dataItem) {\r\n var fromName = dataItem.fromName;\r\n if (fromName) {\r\n var node = _this.nodes.getKey(fromName);\r\n if (!node) {\r\n node = _this.nodes.create(fromName);\r\n node.name = fromName;\r\n node.chart = _this;\r\n node.dataItem = dataItem;\r\n }\r\n dataItem.fromNode = node;\r\n dataItem.fromNode.outgoingDataItems.push(dataItem);\r\n }\r\n var toName = dataItem.toName;\r\n if (toName) {\r\n var node = _this.nodes.getKey(toName);\r\n if (!node) {\r\n node = _this.nodes.create(toName);\r\n node.name = toName;\r\n node.chart = _this;\r\n node.dataItem = dataItem;\r\n }\r\n dataItem.toNode = node;\r\n dataItem.toNode.incomingDataItems.push(dataItem);\r\n }\r\n if (!dataItem.fromNode) {\r\n var strokeModifier = new LinearGradientModifier();\r\n strokeModifier.opacities = [0, 1];\r\n dataItem.link.strokeModifier = strokeModifier;\r\n }\r\n if (!dataItem.toNode) {\r\n var fillModifier = new LinearGradientModifier();\r\n fillModifier.opacities = [1, 0];\r\n dataItem.link.strokeModifier = fillModifier;\r\n }\r\n var value = dataItem.value;\r\n if ($type.isNumber(value)) {\r\n sum += value;\r\n count++;\r\n if (low > value || !$type.isNumber(low)) {\r\n low = value;\r\n }\r\n if (high < value || !$type.isNumber(high)) {\r\n high = value;\r\n }\r\n }\r\n });\r\n var key = \"value\";\r\n this.dataItem.setCalculatedValue(key, high, \"high\");\r\n this.dataItem.setCalculatedValue(key, low, \"low\");\r\n this.dataItem.setCalculatedValue(key, sum, \"sum\");\r\n this.dataItem.setCalculatedValue(key, sum / count, \"average\");\r\n this.dataItem.setCalculatedValue(key, count, \"count\");\r\n $iter.each(this.nodes.iterator(), function (strNode) {\r\n var node = strNode[1];\r\n if (node.fill instanceof Color) {\r\n node.color = node.fill;\r\n }\r\n if (node.color == undefined) {\r\n node.color = _this.colors.next();\r\n }\r\n if (node.dataItem.color != undefined) {\r\n node.color = node.dataItem.color;\r\n }\r\n if (!node.dataItem.visible) {\r\n node.hide(0);\r\n }\r\n _this.getNodeValue(node);\r\n });\r\n this.sortNodes();\r\n this.feedLegend();\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagram.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n this.invalidate();\r\n };\r\n /**\r\n * Sorts nodes by either their values or names, based on `sortBy` setting.\r\n */\r\n FlowDiagram.prototype.sortNodes = function () {\r\n if (this.sortBy == \"name\") {\r\n this._sorted = this.nodes.sortedIterator();\r\n }\r\n else if (this.sortBy == \"value\") {\r\n this._sorted = $iter.sort(this.nodes.iterator(), function (x, y) { return $order.reverse($number.order(x[1].total, y[1].total)); });\r\n }\r\n else {\r\n this._sorted = this.nodes.iterator();\r\n }\r\n };\r\n /**\r\n * Updates a cummulative value of the node.\r\n *\r\n * A node's value is determined by summing values of all of the incoming\r\n * links or all of the outgoing links, whichever results in bigger number.\r\n *\r\n * @param node Node value\r\n */\r\n FlowDiagram.prototype.getNodeValue = function (node) {\r\n // todo: totalIncomming totalOutgoing, total\r\n var incomingTotal = 0;\r\n var outgoingTotal = 0;\r\n $iter.each(node.incomingDataItems.iterator(), function (dataItem) {\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n incomingTotal += value;\r\n }\r\n });\r\n $iter.each(node.outgoingDataItems.iterator(), function (dataItem) {\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n outgoingTotal += value;\r\n }\r\n });\r\n node.total = incomingTotal + outgoingTotal;\r\n node.totalIncoming = incomingTotal;\r\n node.totalOutgoing = outgoingTotal;\r\n };\r\n ;\r\n /**\r\n * Changes the sort type of the nodes.\r\n *\r\n * This will actually reshuffle nodes using nice animation.\r\n */\r\n FlowDiagram.prototype.changeSorting = function () {\r\n this.sortNodes();\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n FlowDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Flow diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n FlowDiagram.prototype.createDataItem = function () {\r\n return new FlowDiagramDataItem();\r\n };\r\n Object.defineProperty(FlowDiagram.prototype, \"nodePadding\", {\r\n /**\r\n * @return Padding (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nodePadding\");\r\n },\r\n /**\r\n * Padding for node square in pixels.\r\n *\r\n * Padding will add extra space around node's name label.\r\n *\r\n * @param value Padding (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nodePadding\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"sortBy\", {\r\n /**\r\n * @returns Node sorting\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"sortBy\");\r\n },\r\n /**\r\n * Sort nodes by \"name\" or \"value\" or do not sort at all. If not sorted, nodes will appear in the same order as they are in the data.\r\n * @default \"none\"\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"sortBy\", value);\r\n this.changeSorting();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"minNodeSize\", {\r\n /**\r\n * @returns min node size\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minNodeSize\");\r\n },\r\n /**\r\n * Sometimes nodes can get very small if their value is little. With this setting you\r\n * can set min size of a node (this is relative value from the total size of all nodes)\r\n * @default 0.02\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"minNodeSize\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"nodes\", {\r\n /**\r\n * A list of chart's nodes.\r\n *\r\n * @param {DictionaryTemplate}\r\n */\r\n get: function () {\r\n if (!this._nodes) {\r\n var template = this.createNode();\r\n template.events.on(\"hit\", function (event) {\r\n event.target.handleHit(event);\r\n });\r\n this._nodes = new DictionaryTemplate(template);\r\n this._disposers.push(new DictionaryDisposer(this._nodes));\r\n }\r\n return this._nodes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.createNode = function () {\r\n var node = new FlowDiagramNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n Object.defineProperty(FlowDiagram.prototype, \"links\", {\r\n /**\r\n * A list of chart's links.\r\n *\r\n * @param {ListTemplate}\r\n */\r\n get: function () {\r\n if (!this._links) {\r\n this._links = new ListTemplate(this.createLink());\r\n this._disposers.push(new ListDisposer(this._links));\r\n }\r\n return this._links;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.createLink = function () {\r\n var link = new FlowDiagramLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n this.nodes.each(function (key, node) {\r\n legendData_1.push(node);\r\n });\r\n legend.data = legendData_1;\r\n legend.dataFields.name = \"name\";\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.nodes.clear();\r\n };\r\n return FlowDiagram;\r\n}(Chart));\r\nexport { FlowDiagram };\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[\"FlowDiagram\"] = FlowDiagram;\r\n//# sourceMappingURL=FlowDiagram.js.map","/**\r\n * Module for building Gauge charts.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, RadarChartDataItem } from \"./RadarChart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar GaugeChartDataItem = /** @class */ (function (_super) {\r\n __extends(GaugeChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GaugeChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"GaugeChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return GaugeChartDataItem;\r\n}(RadarChartDataItem));\r\nexport { GaugeChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nvar GaugeChart = /** @class */ (function (_super) {\r\n __extends(GaugeChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GaugeChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"GaugeChart\";\r\n _this.startAngle = 180;\r\n _this.endAngle = 360;\r\n _this.hands = new ListTemplate(new ClockHand());\r\n _this.hands.events.on(\"inserted\", _this.processHand, _this, false);\r\n _this._disposers.push(new ListDisposer(_this.hands));\r\n _this._disposers.push(_this.hands.template);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n GaugeChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Gauge chart\");\r\n }\r\n };\r\n /**\r\n * Decorates a [[ClockHand]] when it is added to the chart.\r\n *\r\n * @param event Event\r\n */\r\n GaugeChart.prototype.processHand = function (event) {\r\n var hand = event.newValue;\r\n if (!hand.axis) {\r\n hand.axis = this.xAxes.getIndex(0);\r\n }\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n GaugeChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"hands\") {\r\n return 1;\r\n }\r\n else if (b == \"hands\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n return GaugeChart;\r\n}(RadarChart));\r\nexport { GaugeChart };\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[\"GaugeChart\"] = GaugeChart;\r\n//# sourceMappingURL=GaugeChart.js.map","/**\r\n * Map module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { MapSeries } from \"../map/MapSeries\";\r\nimport { MapImage } from \"../map/MapImage\";\r\nimport { MapPolygon } from \"../map/MapPolygon\";\r\nimport { MapPolygonSeries } from \"../map/MapPolygonSeries\";\r\nimport { Projection } from \"../map/projections/Projection\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { SmallMap } from \"../map/SmallMap\";\r\nimport * as $mapUtils from \"../map/MapUtils\";\r\nimport { keyboard } from \"../../core/utils/Keyboard\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { options } from \"../../core/Options\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $geo from \"../map/Geo\";\r\nimport { GraticuleSeries } from \"../map/GraticuleSeries\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[MapChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar MapChartDataItem = /** @class */ (function (_super) {\r\n __extends(MapChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"MapChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return MapChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { MapChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a map.\r\n *\r\n * @see {@link IMapChartEvents} for a list of available Events\r\n * @see {@link IMapChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/} for documentation\r\n */\r\nvar MapChart = /** @class */ (function (_super) {\r\n __extends(MapChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function MapChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A ratio to be used when scaling the map shapes.\r\n *\r\n * @readonly\r\n */\r\n _this.scaleRatio = 1;\r\n /**\r\n * Default duration of zoom animations (ms).\r\n */\r\n _this.zoomDuration = 1000;\r\n /**\r\n * Default zooming animation easing function.\r\n */\r\n _this.zoomEasing = $ease.cubicOut;\r\n /**\r\n * Smallest available zoom level. The map will not allow to zoom out past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 1\r\n */\r\n _this.minZoomLevel = 1;\r\n /**\r\n * Biggest available zoom level. The map will not allow to zoom in past\r\n * this setting.\r\n *\r\n * NOTE: Should be power of 2.\r\n *\r\n * @default 32\r\n */\r\n _this.maxZoomLevel = 32;\r\n /**\r\n * [_prevZoomGeoPoint description]\r\n *\r\n * @todo Description\r\n */\r\n _this._prevZoomGeoPoint = { latitude: 0, longitude: 0 };\r\n _this.className = \"MapChart\";\r\n // Set default projection\r\n _this.projection = new Projection();\r\n _this.setPropertyValue(\"deltaLatitude\", 0);\r\n _this.setPropertyValue(\"deltaLongitude\", 0);\r\n _this.setPropertyValue(\"deltaGamma\", 0);\r\n _this.maxPanOut = 0.7;\r\n _this.homeZoomLevel = 1;\r\n _this.zoomStep = 2;\r\n _this.layout = \"absolute\";\r\n _this.centerMapOnZoomOut = true;\r\n // Set padding\r\n _this.padding(0, 0, 0, 0);\r\n $utils.used(_this.backgroundSeries);\r\n // so that the map would render in a hidden div too\r\n _this.minWidth = 10;\r\n _this.minHeight = 10;\r\n _this.events.once(\"inited\", _this.handleAllInited, _this, false);\r\n // Create a container for map series\r\n var seriesContainer = _this.seriesContainer;\r\n seriesContainer.visible = false;\r\n seriesContainer.inert = true;\r\n seriesContainer.resizable = true;\r\n seriesContainer.events.on(\"transformed\", _this.handleMapTransform, _this, false);\r\n seriesContainer.events.on(\"doublehit\", _this.handleDoubleHit, _this, false);\r\n seriesContainer.events.on(\"dragged\", _this.handleDrag, _this, false);\r\n seriesContainer.zIndex = 0;\r\n seriesContainer.dragWhileResize = true;\r\n //seriesContainer.background.fillOpacity = 0;\r\n seriesContainer.adapter.add(\"scale\", function (scale, target) {\r\n return $math.fitToRange(scale, _this.minZoomLevel, _this.maxZoomLevel);\r\n });\r\n // Set up events\r\n //this.events.on(\"validated\", this.updateExtremes, this);\r\n //this.events.on(\"datavalidated\", this.handleAllValidated, this, false);\r\n //this.events.on(\"datavalidated\", this.updateExtremes, this, false);\r\n _this.events.on(\"maxsizechanged\", function (event) {\r\n if (event.previousWidth == 0 || event.previousHeight == 0) {\r\n _this.updateExtremes();\r\n _this.updateCenterGeoPoint();\r\n }\r\n }, undefined, false);\r\n // Set up main chart container, e.g. set backgrounds and events to monitor\r\n // size changes, etc.\r\n var chartContainer = _this.chartContainer;\r\n chartContainer.parent = _this;\r\n chartContainer.zIndex = -1;\r\n _this._disposers.push(_this.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n if (_this._mapAnimation) {\r\n _this._mapAnimation.stop();\r\n }\r\n var allInited_1 = true;\r\n _this.series.each(function (series) {\r\n series.updateTooltipBounds();\r\n if (!series.inited || series.dataInvalid) {\r\n allInited_1 = false;\r\n }\r\n });\r\n if (allInited_1) {\r\n _this.updateScaleRatio();\r\n }\r\n _this.zoomToGeoPoint(_this._zoomGeoPointReal, _this.zoomLevel, true, 0);\r\n }\r\n }, undefined, false));\r\n var chartContainerBg = chartContainer.background;\r\n chartContainerBg.fillOpacity = 0;\r\n chartContainerBg.events.on(\"down\", function (e) { _this.seriesContainer.dragStart(e.target.interactions.downPointers.getIndex(0)); }, _this);\r\n chartContainerBg.events.on(\"up\", function (e) { _this.seriesContainer.dragStop(); }, _this);\r\n chartContainerBg.events.on(\"doublehit\", _this.handleDoubleHit, _this);\r\n chartContainerBg.focusable = true;\r\n chartContainer.events.on(\"down\", _this.handleMapDown, _this, false);\r\n _this.addDisposer(seriesContainer.events.on(\"down\", function () {\r\n // Cancel any move inertia if there is one\r\n var inertia = _this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n }));\r\n // Add description to background\r\n _this.background.fillOpacity = 0;\r\n // Add keyboard events for panning\r\n _this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (_this.topParent.hasFocused) {\r\n var key = keyboard.getEventKey(ev.event);\r\n if (!_this._zoomControl || !_this._zoomControl.thumb.isFocused) {\r\n switch (key) {\r\n case \"up\":\r\n _this.pan({ x: 0, y: 0.1 });\r\n break;\r\n case \"down\":\r\n _this.pan({ x: 0, y: -0.1 });\r\n break;\r\n case \"left\":\r\n _this.pan({ x: 0.1, y: 0 });\r\n break;\r\n case \"right\":\r\n _this.pan({ x: -0.1, y: 0 });\r\n break;\r\n }\r\n }\r\n }\r\n }, _this));\r\n _this.mouseWheelBehavior = \"zoom\";\r\n var interaction = getInteraction();\r\n _this._disposers.push(interaction.body.events.on(\"down\", _this.handlePanDown, _this));\r\n _this._disposers.push(interaction.body.events.on(\"up\", _this.handlePanUp, _this));\r\n //this._disposers.push(interaction.body.events.on(\"track\", this.handlePanMove, this));\r\n var panSprite = _this.seriesContainer.createChild(Circle);\r\n panSprite.radius = 10;\r\n panSprite.inert = true;\r\n panSprite.isMeasured = false;\r\n panSprite.events.on(\"transformed\", _this.handlePanMove, _this, false);\r\n panSprite.interactionsEnabled = false;\r\n panSprite.opacity = 0;\r\n panSprite.x = 0;\r\n panSprite.y = 0;\r\n _this.panSprite = panSprite;\r\n _this.panBehavior = \"move\";\r\n /*\r\n this.panSprite.inertiaOptions.setKey(\"move\", {\r\n \"time\": 100,\r\n \"duration\": 1000,\r\n \"factor\": 3,\r\n \"easing\": $ease.sinOut\r\n });*/\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanDown = function (event) {\r\n var svgPoint = $utils.documentPointToSvg(event.pointer.point, this.htmlContainer);\r\n if (svgPoint.x > 0 && svgPoint.y > 0 && svgPoint.x < this.svgContainer.width && svgPoint.y < this.svgContainer.height) {\r\n // Get local point\r\n this._downPointOrig = $utils.documentPointToSprite(event.pointer.point, this.seriesContainer);\r\n this.panSprite.moveTo(this._downPointOrig);\r\n this.panSprite.dragStart(event.pointer);\r\n this._downDeltaLongitude = this.deltaLongitude;\r\n this._downDeltaLatitude = this.deltaLatitude;\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanUp = function (event) {\r\n if (this._downPointOrig) {\r\n this.panSprite.dragStop(event.pointer, true);\r\n }\r\n this._downPointOrig = undefined;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handlePanMove = function () {\r\n if (!this.seriesContainer.isResized) {\r\n if (getInteraction().areTransformed([this.panSprite.interactions, this.seriesContainer.interactions])) {\r\n return;\r\n }\r\n var d3Projection = this.projection.d3Projection;\r\n var panBehavior = this.panBehavior;\r\n if (panBehavior != \"move\" && panBehavior != \"none\" && this._downPointOrig && d3Projection.rotate) {\r\n var rotation = d3Projection.rotate();\r\n var dln = rotation[0];\r\n var dlt = rotation[1];\r\n var dlg = rotation[2];\r\n d3Projection.rotate([0, 0, 0]);\r\n var downGeoLocal = this.projection.invert(this._downPointOrig);\r\n var local = { x: this.panSprite.pixelX, y: this.panSprite.pixelY };\r\n var geoLocal = void 0;\r\n if (local) {\r\n geoLocal = this.projection.invert(local);\r\n }\r\n d3Projection.rotate([dln, dlt, dlg]);\r\n if (geoLocal) {\r\n if (panBehavior == \"rotateLat\" || panBehavior == \"rotateLongLat\") {\r\n this.deltaLatitude = this._downDeltaLatitude + geoLocal.latitude - downGeoLocal.latitude;\r\n }\r\n if (panBehavior == \"rotateLong\" || panBehavior == \"rotateLongLat\") {\r\n this.deltaLongitude = this._downDeltaLongitude + geoLocal.longitude - downGeoLocal.longitude;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.handleAllInited = function () {\r\n var _this = this;\r\n var inited = true;\r\n this.seriesContainer.visible = true;\r\n this.series.each(function (series) {\r\n if (!series.inited || series.dataInvalid) {\r\n inited = false;\r\n }\r\n });\r\n if (inited) {\r\n this.updateCenterGeoPoint();\r\n this.updateScaleRatio();\r\n this.goHome(0);\r\n }\r\n else {\r\n // TODO verify that this is correct\r\n var disposer_1 = registry.events.once(\"exitframe\", function () {\r\n _this.removeDispose(disposer_1);\r\n _this.handleAllInited();\r\n }, this, false);\r\n this.addDisposer(disposer_1);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.updateZoomGeoPoint = function () {\r\n var seriesPoint = $utils.svgPointToSprite({ x: this.innerWidth / 2 + this.pixelPaddingLeft, y: this.innerHeight / 2 + this.pixelPaddingTop }, this.series.getIndex(0));\r\n var geoPoint = this.projection.invert(seriesPoint);\r\n this._zoomGeoPointReal = geoPoint;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.updateCenterGeoPoint = function () {\r\n var maxLeft;\r\n var maxRight;\r\n var maxTop;\r\n var maxBottom;\r\n if (this.backgroundSeries) {\r\n var features = this.backgroundSeries.getFeatures();\r\n if (features.length > 0) {\r\n var bounds = this.projection.d3Path.bounds(features[0].geometry);\r\n maxLeft = bounds[0][0];\r\n maxTop = bounds[0][1];\r\n maxRight = bounds[1][0];\r\n maxBottom = bounds[1][1];\r\n }\r\n }\r\n else {\r\n this.series.each(function (series) {\r\n var bbox = series.group.node.getBBox();\r\n if (maxLeft > bbox.x || !$type.isNumber(maxLeft)) {\r\n maxLeft = bbox.x;\r\n }\r\n if (maxRight < bbox.x + bbox.width || !$type.isNumber(maxRight)) {\r\n maxRight = bbox.x + bbox.width;\r\n }\r\n if (maxTop > bbox.y || !$type.isNumber(maxTop)) {\r\n maxTop = bbox.y;\r\n }\r\n if (maxBottom < bbox.y + bbox.height || !$type.isNumber(maxBottom)) {\r\n maxBottom = bbox.y + bbox.height;\r\n }\r\n });\r\n }\r\n this.seriesMaxLeft = maxLeft;\r\n this.seriesMaxRight = maxRight;\r\n this.seriesMaxTop = maxTop;\r\n this.seriesMaxBottom = maxBottom;\r\n this.seriesWidth = maxRight - maxLeft;\r\n this.seriesHeight = maxBottom - maxTop;\r\n if (this.seriesWidth > 0 && this.seriesHeight > 0) {\r\n this.chartContainer.visible = true;\r\n this._centerGeoPoint = this.projection.invert({ x: maxLeft + (maxRight - maxLeft) / 2, y: maxTop + (maxBottom - maxTop) / 2 });\r\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\r\n this._zoomGeoPointReal = this._centerGeoPoint;\r\n }\r\n }\r\n else {\r\n this.chartContainer.visible = false;\r\n }\r\n };\r\n /**\r\n * Prevents map to be dragged out of the container area\r\n * @ignore\r\n */\r\n MapChart.prototype.handleDrag = function () {\r\n var d = this.zoomLevel * this.scaleRatio;\r\n var ww = this.seriesWidth * d;\r\n var hh = this.seriesHeight * d;\r\n var seriesContainer = this.seriesContainer;\r\n var maxLeft = this.seriesMaxLeft * d;\r\n var maxRight = this.seriesMaxRight * d;\r\n var maxTop = this.seriesMaxTop * d;\r\n var maxBottom = this.seriesMaxBottom * d;\r\n var x = seriesContainer.pixelX;\r\n var y = seriesContainer.pixelY;\r\n var maxPanOut = this.maxPanOut;\r\n var minX = Math.min(this.maxWidth * (1 - maxPanOut) - ww - maxLeft, -maxLeft);\r\n if (x < minX) {\r\n x = minX;\r\n }\r\n var maxX = Math.max(this.maxWidth * maxPanOut - maxLeft, this.maxWidth - maxRight);\r\n if (x > maxX) {\r\n x = maxX;\r\n }\r\n var minY = Math.min(this.maxHeight * (1 - maxPanOut) - hh - maxTop, -maxTop);\r\n if (y < minY) {\r\n y = minY;\r\n }\r\n var maxY = Math.max(this.maxHeight * maxPanOut - maxTop, this.maxHeight - maxBottom);\r\n if (y > maxY) {\r\n y = maxY;\r\n }\r\n seriesContainer.moveTo({ x: x, y: y }, undefined, undefined, true);\r\n this._zoomGeoPointReal = this.zoomGeoPoint;\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n MapChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Map\");\r\n }\r\n if (!$type.hasValue(this.background.readerTitle)) {\r\n this.background.readerTitle = this.language.translate(\"Use plus and minus keys on your keyboard to zoom in and out\");\r\n }\r\n };\r\n /**\r\n * Handles event when a pointer presses down on the map, e.g. user presses\r\n * down mouse or touches the map on a screen.\r\n *\r\n * Stops all animations currently going on.\r\n */\r\n MapChart.prototype.handleMapDown = function () {\r\n if (this._mapAnimation) {\r\n this._mapAnimation.stop();\r\n }\r\n };\r\n /**\r\n * Handles the event when user doubleclicks or dooubletaps the map: zooms\r\n * in on the reference point.\r\n *\r\n * @param event Original event\r\n */\r\n MapChart.prototype.handleDoubleHit = function (event) {\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var geoPoint = this.svgPointToGeo(svgPoint);\r\n this.zoomIn(geoPoint);\r\n };\r\n /**\r\n * Handles mouse wheel event, e.g. user rotates mouse wheel while over the\r\n * map: zooms in or out depending on the direction of the wheel turn.\r\n *\r\n * @param event Original event\r\n */\r\n MapChart.prototype.handleWheel = function (event) {\r\n // Cancel any move inertia if there is one\r\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var geoPoint = this.svgPointToGeo(svgPoint);\r\n if (event.shift.y < 0) {\r\n this.zoomIn(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\r\n }\r\n else {\r\n this.zoomOut(geoPoint, undefined, this.interactions.mouseOptions.sensitivity);\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"mouseWheelBehavior\", {\r\n /**\r\n * @return mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"mouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies what should chart do if when mouse wheel is rotated.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n * @default zoomX\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer = this.chartContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer) {\r\n this._mouseWheelDisposer.dispose();\r\n }\r\n this.chartContainer.wheelable = false;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"panBehavior\", {\r\n /**\r\n * @returns Behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"panBehavior\");\r\n },\r\n /**\r\n * What \"dragging\" map does.\r\n *\r\n * Available values:\r\n * * `\"move\"` (default): changes position of the map.\r\n * * `\"rotateLat\"`: changes `deltaLatitude` (rotates the globe vertically).\r\n * * `\"rotateLong\"`: changes `deltaLongitude` (rotates the globe horizontally).\r\n * * `\"rotateLongLat\"`: changes both `deltaLongitude` and `deltaLatitude` (rotates the globe in any direction).\r\n *\r\n * @default \"move\"\r\n * @since 4.3.0\r\n * @param value Behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"panBehavior\", value)) {\r\n var seriesContainer = this.seriesContainer;\r\n this.panSprite.draggable = false;\r\n seriesContainer.draggable = false;\r\n switch (value) {\r\n case \"move\":\r\n seriesContainer.draggable = true;\r\n break;\r\n default:\r\n this.panSprite.draggable = true;\r\n break;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"centerMapOnZoomOut\", {\r\n /**\r\n * @returns If the map should be centered when zooming out.\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"centerMapOnZoomOut\");\r\n },\r\n /**\r\n * Specifies if the map should be centered when zooming out\r\n * @default true\r\n * @since 4.7.12\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"centerMapOnZoomOut\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"projection\", {\r\n /**\r\n * @return Projection\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"projection\");\r\n },\r\n /**\r\n * Projection to use for the map.\r\n *\r\n * Available projections:\r\n * * Albers\r\n * * AlbersUSA\r\n * * AzimuthalEqualArea\r\n * * Eckert6\r\n * * EqualEarth\r\n * * Mercator\r\n * * Miller\r\n * * NaturalEarth\r\n * * Orthographic\r\n * * Stereographic\r\n *\r\n * ```TypeScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JavaScript\r\n * map.projection = new am4maps.projections.Mercator();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"projection\": \"Mercator\"\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Setting_projection} More about projections\r\n * @param projection Projection\r\n */\r\n set: function (projection) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"projection\", projection)) {\r\n this.invalidateProjection();\r\n projection.chart = this;\r\n if (this._backgroundSeries) {\r\n this._backgroundSeries.invalidate();\r\n }\r\n if (this.inited) {\r\n this.updateExtremes();\r\n }\r\n this.series.each(function (series) {\r\n series.events.once(\"validated\", function () {\r\n _this.updateCenterGeoPoint();\r\n _this.updateScaleRatio();\r\n _this.goHome(0);\r\n });\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapChart.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.updateExtremes();\r\n };\r\n /**\r\n * Calculates the longitudes and latitudes of the most distant points from\r\n * the center in all four directions: West, East, North, and South.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n MapChart.prototype.updateExtremes = function () {\r\n var east;\r\n var north;\r\n var west;\r\n var south;\r\n this.series.each(function (series) {\r\n if (series.ignoreBounds || (series instanceof GraticuleSeries && series.fitExtent)) {\r\n }\r\n else {\r\n if (series.north > north || !$type.isNumber(north)) {\r\n north = series.north;\r\n }\r\n if (series.south < south || !$type.isNumber(south)) {\r\n south = series.south;\r\n }\r\n if (series.west < west || !$type.isNumber(west)) {\r\n west = series.west;\r\n }\r\n if (series.east > east || !$type.isNumber(east)) {\r\n east = series.east;\r\n }\r\n }\r\n });\r\n var features = [];\r\n var foundGraticule = false;\r\n // if we gave graticule, get features of these series only for faster fitSize\r\n this.series.each(function (series) {\r\n if (series instanceof GraticuleSeries && !series.fitExtent) {\r\n features = series.getFeatures();\r\n foundGraticule = true;\r\n }\r\n });\r\n if (!foundGraticule) {\r\n this.series.each(function (series) {\r\n if (series.ignoreBounds || (series instanceof GraticuleSeries && series.fitExtent)) {\r\n }\r\n else {\r\n features = features.concat(series.getFeatures());\r\n }\r\n });\r\n }\r\n var w = $math.max(50, this.innerWidth);\r\n var h = $math.max(50, this.innerHeight);\r\n var d3Projection = this.projection.d3Projection;\r\n if (features.length > 0 && d3Projection && (this.east != east || this.west != west || this.north != north || this.south != south)) {\r\n this.east = east;\r\n this.west = west;\r\n this.north = north;\r\n this.south = south;\r\n if (d3Projection.rotate) {\r\n var rotation = d3Projection.rotate();\r\n var deltaLong = rotation[0];\r\n var deltaLat = rotation[1];\r\n var deltaGamma = rotation[2];\r\n this.deltaLongitude = deltaLong;\r\n this.deltaLatitude = deltaLat;\r\n this.deltaGamma = deltaGamma;\r\n }\r\n var geoJSON = { \"type\": \"FeatureCollection\", features: features };\r\n var initialScale = d3Projection.scale();\r\n d3Projection.fitSize([w, h], geoJSON);\r\n if (d3Projection.scale() != initialScale) {\r\n this.invalidateDataUsers();\r\n }\r\n this.series.each(function (series) {\r\n if (series instanceof GraticuleSeries) {\r\n series.invalidateData();\r\n }\r\n });\r\n if (this._backgroundSeries) {\r\n var polygon = this._backgroundSeries.mapPolygons.getIndex(0);\r\n if (polygon) {\r\n polygon.multiPolygon = $mapUtils.getBackground(this.north, this.east, this.south, this.west);\r\n }\r\n }\r\n this._fitWidth = w;\r\n this._fitHeight = h;\r\n }\r\n if (!this._zoomGeoPointReal || !$type.isNumber(this._zoomGeoPointReal.latitude)) {\r\n this.goHome(0);\r\n }\r\n };\r\n /**\r\n * (Re)calculates a ratio which should be used to scale the actual map so\r\n * that it fits perfectly into available space. Helps to avoid redrawing of all the map if container size changes\r\n * @ignore\r\n */\r\n MapChart.prototype.updateScaleRatio = function () {\r\n var scaleRatio;\r\n this.updateCenterGeoPoint();\r\n var hScale = this.innerWidth / this.seriesWidth;\r\n var vScale = this.innerHeight / this.seriesHeight;\r\n scaleRatio = $math.min(hScale, vScale);\r\n if ($type.isNaN(scaleRatio) || scaleRatio == Infinity) {\r\n scaleRatio = 1;\r\n }\r\n if (scaleRatio != this.scaleRatio) {\r\n this.scaleRatio = scaleRatio;\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.scale = scaleRatio;\r\n series.updateTooltipBounds();\r\n });\r\n this.backgroundSeries.scale = scaleRatio;\r\n this.dispatch(\"scaleratiochanged\");\r\n }\r\n };\r\n /**\r\n * Converts a point within map container to geographical (lat/long)\r\n * coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\r\n MapChart.prototype.svgPointToGeo = function (point) {\r\n var series = this.series.getIndex(0);\r\n if (series) {\r\n var seriesPoint = $utils.svgPointToSprite(point, series);\r\n return this.seriesPointToGeo(seriesPoint);\r\n }\r\n };\r\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within map's\r\n * container.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\r\n MapChart.prototype.geoPointToSVG = function (point) {\r\n var series = this.series.getIndex(0);\r\n if (series) {\r\n var seriesPoint = this.geoPointToSeries(point);\r\n return $utils.spritePointToSvg(seriesPoint, series);\r\n }\r\n };\r\n /**\r\n * Converts a point (X/Y) within actual objects of the map to geographical\r\n * (lat/long) coordinates.\r\n *\r\n * @param point Source point\r\n * @return Geo-point\r\n */\r\n MapChart.prototype.seriesPointToGeo = function (point) {\r\n return this.projection.invert(point);\r\n };\r\n /**\r\n * Converts geographical (lat/long) coordinates to an X/Y point within\r\n * actual elements/objects of the maps.\r\n *\r\n * @param point Source geo-point\r\n * @return Point\r\n */\r\n MapChart.prototype.geoPointToSeries = function (point) {\r\n return this.projection.convert(point);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"geodata\", {\r\n /**\r\n * @return GeoJSON data\r\n */\r\n get: function () {\r\n return this._geodata;\r\n },\r\n /**\r\n * Map data in GeoJSON format.\r\n *\r\n * The Map supports the following GeoJSON objects: `Point`, `LineString`,\r\n * `Polygon`, `MultiPoint`, `MultiLineString`, and `MultiPolygon`.\r\n *\r\n * @see {@link http://geojson.org/} Official GeoJSON format specification\r\n * @param geoJSON GeoJSON data\r\n */\r\n set: function (geodata) {\r\n if (geodata != this._geodata) {\r\n this._geodata = geodata;\r\n if (this.reverseGeodata) {\r\n this.processReverseGeodata(this._geodata);\r\n }\r\n this.invalidateData();\r\n this.dataUsers.each(function (dataUser) {\r\n for (var i = dataUser.data.length - 1; i >= 0; i--) {\r\n if (dataUser.data[i].madeFromGeoData == true) {\r\n dataUser.data.splice(i, 1);\r\n }\r\n }\r\n dataUser.disposeData();\r\n dataUser.invalidateData();\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"reverseGeodata\", {\r\n /**\r\n * @returns Reverse the order of geodata coordinates?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"reverseGeodata\");\r\n },\r\n /**\r\n * Indicates whether GeoJSON geodata supplied to the chart uses\r\n * ESRI (clockwise) or non-ESRI (counter-clockwise) order of the polygon\r\n * coordinates.\r\n *\r\n * `MapChart` supports only ESRI standard, so if your custom maps appears\r\n * garbled, try setting `reverseGeodata = true`.\r\n *\r\n * @default false\r\n * @since 4.10.11\r\n * @param value Reverse the order of geodata coordinates?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"reverseGeodata\", value) && this._geodata) {\r\n this.processReverseGeodata(this._geodata);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Reverses the order of polygons on a GeoJSON data.\r\n *\r\n * @since 4.10.11\r\n * @param geodata Source geodata\r\n */\r\n MapChart.prototype.processReverseGeodata = function (geodata) {\r\n for (var i = 0; i < geodata.features.length; i++) {\r\n var feature = geodata.features[i];\r\n for (var x = 0; x < feature.geometry.coordinates.length; x++) {\r\n if (feature.geometry.type == \"MultiPolygon\") {\r\n for (var y = 0; y < feature.geometry.coordinates[x].length; y++) {\r\n feature.geometry.coordinates[x][y].reverse();\r\n }\r\n }\r\n else {\r\n feature.geometry.coordinates[x].reverse();\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Zooms the map to particular zoom level and centers on a latitude/longitude\r\n * coordinate.\r\n *\r\n * @param point Center coordinate\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToGeoPoint = function (point, zoomLevel, center, duration, mapObject) {\r\n var _this = this;\r\n if (!point) {\r\n var hasData_1 = false;\r\n this.series.each(function (series) {\r\n if (series.dataItems.length > 0) {\r\n hasData_1 = true;\r\n }\r\n });\r\n if (hasData_1) {\r\n point = this.zoomGeoPoint;\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!point || !$type.isNumber(point.longitude) || !$type.isNumber(point.latitude)) {\r\n return;\r\n }\r\n this._zoomGeoPointReal = point;\r\n zoomLevel = $math.fitToRange(zoomLevel, this.minZoomLevel, this.maxZoomLevel);\r\n var seriesPoint = this.projection.convert(point);\r\n if (seriesPoint) {\r\n var svgPoint = this.geoPointToSVG(point);\r\n var mapPoint = $utils.svgPointToSprite(svgPoint, this);\r\n if (center) {\r\n mapPoint = {\r\n x: this.innerWidth / 2,\r\n y: this.innerHeight / 2\r\n };\r\n }\r\n if (!$type.isNumber(duration)) {\r\n duration = this.zoomDuration;\r\n }\r\n var x = mapPoint.x - seriesPoint.x * zoomLevel * this.scaleRatio;\r\n var y = mapPoint.y - seriesPoint.y * zoomLevel * this.scaleRatio;\r\n if (!mapObject && zoomLevel < this.zoomLevel && this.centerMapOnZoomOut && zoomLevel < 1.5) {\r\n x = this.innerWidth / 2 - (this.seriesMaxLeft + (this.seriesMaxRight - this.seriesMaxLeft) / 2) * zoomLevel * this.scaleRatio;\r\n y = this.innerHeight / 2 - (this.seriesMaxTop + (this.seriesMaxBottom - this.seriesMaxTop) / 2) * zoomLevel * this.scaleRatio;\r\n }\r\n this._mapAnimation = this.seriesContainer.animate([{\r\n property: \"scale\",\r\n to: zoomLevel\r\n }, {\r\n property: \"x\", from: this.seriesContainer.pixelX,\r\n to: x\r\n }, {\r\n property: \"y\", from: this.seriesContainer.pixelY,\r\n to: y\r\n }], duration, this.zoomEasing);\r\n this._disposers.push(this._mapAnimation.events.on(\"animationended\", function () {\r\n _this._zoomGeoPointReal = _this.zoomGeoPoint;\r\n }));\r\n this.seriesContainer.validatePosition();\r\n return this._mapAnimation;\r\n }\r\n };\r\n /**\r\n * Zooms the map to a particular map object.\r\n *\r\n * @param mapObject Target map object\r\n * @param zoomLevel Zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToMapObject = function (mapObject, zoomLevel, center, duration) {\r\n if (center == undefined) {\r\n center = true;\r\n }\r\n var inertia = this.seriesContainer.interactions.inertias.getKey(\"move\");\r\n if (inertia) {\r\n inertia.done();\r\n }\r\n if (mapObject instanceof MapImage) {\r\n if ($type.isNaN(zoomLevel)) {\r\n zoomLevel = 5;\r\n }\r\n return this.zoomToGeoPoint({ latitude: mapObject.latitude, longitude: mapObject.longitude }, zoomLevel, center, duration, true);\r\n }\r\n var dataItem = mapObject.dataItem;\r\n if (dataItem && $type.isNumber(dataItem.zoomLevel)) {\r\n zoomLevel = dataItem.zoomLevel;\r\n }\r\n if (mapObject instanceof MapPolygon) {\r\n var dataItem_1 = mapObject.dataItem;\r\n var bbox = mapObject.polygon.bbox;\r\n if (bbox.width == 0 || bbox.height == 0) {\r\n bbox = mapObject.polygon.group.getBBox();\r\n }\r\n if (!$type.isNumber(zoomLevel)) {\r\n zoomLevel = Math.min(this.seriesWidth / bbox.width, this.seriesHeight / bbox.height);\r\n }\r\n var geoPoint = void 0;\r\n if (dataItem_1 && $type.hasValue(dataItem_1.zoomGeoPoint)) {\r\n geoPoint = dataItem_1.zoomGeoPoint;\r\n }\r\n else {\r\n // this is more accurate\r\n var polygonPoint = { x: bbox.x + bbox.width / 2, y: bbox.y + bbox.height / 2 };\r\n var seriesPoint = $utils.spritePointToSprite(polygonPoint, mapObject.polygon, mapObject.series);\r\n geoPoint = this.seriesPointToGeo(seriesPoint);\r\n }\r\n return this.zoomToGeoPoint(geoPoint, zoomLevel, true, duration, true);\r\n }\r\n };\r\n /**\r\n * Zooms the map to a particular viewport.\r\n *\r\n * The `north`, `east`, `south`, and `west` define boundaries of the\r\n * imaginary viewort we want to zoom the map to.\r\n *\r\n * `level` is not actual zoom level. The map will determine the zoom level\r\n * required to accommodated such zoom, and will adjust it by `level` if set.\r\n *\r\n * @param north Latitude of the North-most boundary\r\n * @param east Longitude of the East-most boundary\r\n * @param south Latitude of the South-most boundary\r\n * @param west Longitude of the West-most boundary\r\n * @param level Adjust zoom level\r\n * @param center Center on the given coordinate?\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomToRectangle = function (north, east, south, west, level, center, duration) {\r\n if ($type.isNaN(level)) {\r\n level = 1;\r\n }\r\n var w = $math.min(west, east);\r\n var e = $math.max(west, east);\r\n west = w;\r\n east = e;\r\n var splitLongitude = $math.normalizeAngle(180 - this.deltaLongitude);\r\n if (splitLongitude > 180) {\r\n splitLongitude -= 360;\r\n }\r\n var newLong = west + (east - west) / 2;\r\n var d = (west - east);\r\n if (west < splitLongitude && east > splitLongitude) {\r\n newLong += 180;\r\n d = $math.normalizeAngle(east - west - 360);\r\n }\r\n var zoomLevel = level * Math.min((this.south - this.north) / (south - north), Math.abs((this.west - this.east) / d));\r\n return this.zoomToGeoPoint({ latitude: north + (south - north) / 2, longitude: newLong }, zoomLevel, center, duration, true);\r\n };\r\n /**\r\n * Zooms in the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomIn = function (geoPoint, duration, sensitivity) {\r\n if (sensitivity === void 0) { sensitivity = 1; }\r\n var step = 1 + (this.zoomStep - 1) * sensitivity;\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel * step, false, duration);\r\n };\r\n /**\r\n * Zooms out the map, optionally centering on particular latitude/longitude\r\n * point.\r\n *\r\n * @param geoPoint Optional center point\r\n * @param duration Duration for zoom animation (ms)\r\n * @return Zoom animation\r\n */\r\n MapChart.prototype.zoomOut = function (geoPoint, duration, sensitivity) {\r\n if (sensitivity === void 0) { sensitivity = 1; }\r\n var step = 1 + (this.zoomStep - 1) * sensitivity;\r\n if (step < 1) {\r\n step = 1;\r\n }\r\n return this.zoomToGeoPoint(geoPoint, this.zoomLevel / step, false, duration);\r\n };\r\n /**\r\n * Pans the maps using relative coordinates. E.g.:\r\n *\r\n * ```JSON\r\n * {\r\n * x: 0.1,\r\n * y: -0.1\r\n * }\r\n * ```\r\n *\r\n * The above will move the map by 10% to the right, and by 10% upwards.\r\n *\r\n * @param shift Vertical and horizontal shift\r\n * @param duration Pan animation duration (ms)\r\n */\r\n MapChart.prototype.pan = function (shift, duration) {\r\n var point = this.geoPointToSVG(this.zoomGeoPoint);\r\n point.x += this.pixelWidth * shift.x;\r\n point.y += this.pixelHeight * shift.y;\r\n this.zoomToGeoPoint(this.svgPointToGeo(point), this.zoomLevel, true, duration, true);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"zoomGeoPoint\", {\r\n /**\r\n * Current lat/long coordinates for the center of the viewport. (default\r\n * zoom reference point)\r\n *\r\n * @readonly\r\n * @return Coordinates\r\n */\r\n get: function () {\r\n var point = $utils.spritePointToSvg({ x: this.pixelWidth / 2, y: this.pixelHeight / 2 }, this);\r\n return this.svgPointToGeo(point);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomLevel\", {\r\n /**\r\n * @return Zoom level\r\n */\r\n get: function () {\r\n return this.seriesContainer.scale;\r\n },\r\n /**\r\n * Current zoom level.\r\n *\r\n * @readonly\r\n * @return Zoom level\r\n */\r\n set: function (value) {\r\n this.seriesContainer.scale = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Dispatches events after some map transformation, like pan or zoom.\r\n *\r\n * @ignore\r\n */\r\n MapChart.prototype.handleMapTransform = function () {\r\n if (this.zoomLevel != this._prevZoomLevel) {\r\n this.dispatch(\"zoomlevelchanged\");\r\n this._prevZoomLevel = this.zoomLevel;\r\n this.svgContainer.readerAlert(this.language.translate(\"Zoom level changed to %1\", this.language.locale, $type.castString(this.zoomLevel)));\r\n }\r\n if (this.zoomGeoPoint && (this._prevZoomGeoPoint.latitude != this.zoomGeoPoint.latitude || this._prevZoomGeoPoint.longitude != this.zoomGeoPoint.longitude)) {\r\n this.dispatch(\"mappositionchanged\");\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"smallMap\", {\r\n /**\r\n * @return Small map\r\n */\r\n get: function () {\r\n if (!this._smallMap) {\r\n var smallMap = new SmallMap();\r\n this.smallMap = smallMap;\r\n }\r\n return this._smallMap;\r\n },\r\n /**\r\n * A [[SmallMap]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a small map\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JavaScript\r\n * // Create a small map\r\n * map.smallMap = new am4maps.SmallMap();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"smallMap\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param smallMap Small map\r\n */\r\n set: function (smallMap) {\r\n if (this._smallMap) {\r\n this.removeDispose(this._smallMap);\r\n }\r\n this._smallMap = smallMap;\r\n this._smallMap.chart = this;\r\n smallMap.parent = this.chartContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomControl\", {\r\n /**\r\n * @return Zoom control\r\n */\r\n get: function () {\r\n return this._zoomControl;\r\n },\r\n /**\r\n * A [[ZoomControl]] to be used on the map.\r\n *\r\n * Please note, that accessing this property will NOT create a zoom control\r\n * if it has not yet been created. (except in JSON)\r\n *\r\n * ```TypeScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JavaScript\r\n * // Create a zoom control\r\n * map.zoomControl = new am4maps.ZoomControl();\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"zoomControl\": {}\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @param zoomControl Zoom control\r\n */\r\n set: function (zoomControl) {\r\n if (this._zoomControl) {\r\n this.removeDispose(this._zoomControl);\r\n }\r\n this._zoomControl = zoomControl;\r\n zoomControl.chart = this;\r\n zoomControl.parent = this.chartContainer;\r\n zoomControl.plusButton.exportable = false;\r\n zoomControl.minusButton.exportable = false;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a map series of appropriate type.\r\n *\r\n * @return Map series\r\n */\r\n MapChart.prototype.createSeries = function () {\r\n return new MapSeries();\r\n };\r\n Object.defineProperty(MapChart.prototype, \"deltaLongitude\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaLongitude\");\r\n },\r\n /**\r\n * Degrees to rotate the map around vertical axis (Y).\r\n *\r\n * E.g. if set to -160, the longitude 20 will become a new center, creating\r\n * a Pacific-centered map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaLongitude\", $geo.wrapAngleTo180(value))) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"deltaLatitude\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaLatitude\");\r\n },\r\n /**\r\n * Degrees to rotate the map around horizontal axis (X).\r\n *\r\n * E.g. setting this to 90 will put Antarctica directly in the center of\r\n * the map.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaLatitude\", value)) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"deltaGamma\", {\r\n /**\r\n * @return Rotation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"deltaGamma\");\r\n },\r\n /**\r\n * Degrees to rotate the map around \"Z\" axis. This is the axis that pierces\r\n * the globe directly from the viewer's point of view.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/map/#Map_rotation} For more info on map rotation.\r\n * @since 4.3.0\r\n * @param value Rotation\r\n */\r\n set: function (value) {\r\n value = $math.round(value, 3);\r\n if (this.setPropertyValue(\"deltaGamma\", value)) {\r\n this.rotateMap();\r\n this.updateZoomGeoPoint();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n MapChart.prototype.rotateMap = function () {\r\n if (this.projection.d3Projection) {\r\n if (this.projection.d3Projection.rotate) {\r\n this.projection.d3Projection.rotate([this.deltaLongitude, this.deltaLatitude, this.deltaGamma]);\r\n this.invalidateProjection();\r\n //this.updateExtremes(); // removal fixes #3292\r\n }\r\n }\r\n };\r\n Object.defineProperty(MapChart.prototype, \"maxPanOut\", {\r\n /**\r\n * @return Max pan out\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxPanOut\");\r\n },\r\n /**\r\n * Maximum portion of the map's width/height to allow panning \"off screen\".\r\n *\r\n * A value of 0 (zero) will prevent any portion of the the map to be panned\r\n * outside the viewport.\r\n *\r\n * 0.5 will allow half of the map to be outside viewable area.\r\n *\r\n * @default 0.7\r\n * @param value Max pan out\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxPanOut\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"homeGeoPoint\", {\r\n /**\r\n * @return Home geo point\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"homeGeoPoint\");\r\n },\r\n /**\r\n * The geographical point to center map on when it is first loaded.\r\n *\r\n * The map will also be centered to this point when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home geo point\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"homeGeoPoint\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"homeZoomLevel\", {\r\n /**\r\n * @return Home zoom level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"homeZoomLevel\");\r\n },\r\n /**\r\n * The zoom level to put the map in when it is first loaded.\r\n *\r\n * The map will also be set to this zoom level when you call `goHome()`\r\n * method.\r\n *\r\n * @param value Home zoom level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"homeZoomLevel\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MapChart.prototype, \"zoomStep\", {\r\n /**\r\n * @return Zoom factor\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"zoomStep\");\r\n },\r\n /**\r\n * When user zooms in or out current zoom level is multiplied or divided\r\n * by value of this setting.\r\n *\r\n * @default 2\r\n * @param value Zoom factor\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"zoomStep\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Invalidates projection, causing all series to be redrawn.\r\n *\r\n * Call this after changing projection or its settings.\r\n */\r\n MapChart.prototype.invalidateProjection = function () {\r\n this.east = undefined;\r\n this.invalidateDataUsers();\r\n this.updateCenterGeoPoint();\r\n };\r\n Object.defineProperty(MapChart.prototype, \"geodataSource\", {\r\n /**\r\n * Returns a [[DataSource]] specifically for loading Component's data.\r\n *\r\n * @return Data source\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._dataSources[\"geodata\"]) {\r\n var dataSource = this.getDataSource(\"geodata\");\r\n dataSource.events.on(\"parseended\", function () {\r\n _this.events.once(\"datavalidated\", function () {\r\n _this.goHome(0);\r\n });\r\n });\r\n }\r\n return this._dataSources[\"geodata\"];\r\n },\r\n /**\r\n * Sets a [[DataSource]] to be used for loading Component's data.\r\n *\r\n * @param value Data source\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this._dataSources[\"geodata\"]) {\r\n this.removeDispose(this._dataSources[\"geodata\"]);\r\n }\r\n this._dataSources[\"geodata\"] = value;\r\n this._dataSources[\"geodata\"].component = this;\r\n this.events.on(\"inited\", function () {\r\n _this.loadData(\"geodata\");\r\n }, this, false);\r\n this.setDataSourceEvents(value, \"geodata\");\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 MapChart.prototype.processConfig = function (config) {\r\n if ($type.hasValue(config[\"geodata\"]) && $type.isString(config[\"geodata\"])) {\r\n var name_1 = config[\"geodata\"];\r\n // Check if there's a map loaded by such name\r\n if ($type.hasValue(window[\"am4geodata_\" + config[\"geodata\"]])) {\r\n config[\"geodata\"] = window[\"am4geodata_\" + config[\"geodata\"]];\r\n }\r\n // Nope. Let's try maybe we got JSON as string?\r\n else {\r\n try {\r\n config[\"geodata\"] = JSON.parse(config[\"geodata\"]);\r\n }\r\n catch (e) {\r\n // No go again. Error out.\r\n this.raiseCriticalError(Error(\"MapChart error: Geodata `\" + name_1 + \"` is not loaded or is incorrect.\"), true);\r\n }\r\n }\r\n }\r\n // Instantiate projection\r\n if ($type.hasValue(config[\"projection\"]) && $type.isString(config[\"projection\"])) {\r\n config[\"projection\"] = this.createClassInstance(config[\"projection\"]);\r\n }\r\n // Set up small map\r\n if ($type.hasValue(config.smallMap) && !$type.hasValue(config.smallMap.type)) {\r\n config.smallMap.type = \"SmallMap\";\r\n }\r\n // Set up zoom control\r\n if ($type.hasValue(config.zoomControl) && !$type.hasValue(config.zoomControl.type)) {\r\n config.zoomControl.type = \"ZoomControl\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n MapChart.prototype.handleSeriesAdded = function (event) {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n var series = event.newValue;\r\n series.scale = this.scaleRatio;\r\n series.events.on(\"validated\", this.updateCenterGeoPoint, this, false);\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n MapChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"smallMap\") {\r\n return 1;\r\n }\r\n else if (b == \"smallMap\") {\r\n return -1;\r\n }\r\n else if (a == \"series\") {\r\n return 1;\r\n }\r\n else if (b == \"series\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n /**\r\n * Adds `projection` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\r\n MapChart.prototype.asIs = function (field) {\r\n return field == \"projection\" || field == \"geodata\" || _super.prototype.asIs.call(this, field);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"centerGeoPoint\", {\r\n /**\r\n * Geo point of map center\r\n *\r\n * @readonly\r\n */\r\n get: function () {\r\n return this._centerGeoPoint;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Resets the map to its original position and zoom level.\r\n *\r\n * Use the only parameter to set number of milliseconds for the zoom\r\n * animation to play.\r\n *\r\n * @param duration Duration (ms)\r\n */\r\n MapChart.prototype.goHome = function (duration) {\r\n var homeGeoPoint = this.homeGeoPoint;\r\n if (!homeGeoPoint) {\r\n homeGeoPoint = this.centerGeoPoint;\r\n }\r\n if (homeGeoPoint) {\r\n this.zoomToGeoPoint(homeGeoPoint, this.homeZoomLevel, true, duration, true);\r\n }\r\n };\r\n /**\r\n * Sets [[Paper]] instance to use to draw elements.\r\n *\r\n * @ignore\r\n * @param paper Paper\r\n * @return true if paper was changed, false, if it's the same\r\n */\r\n MapChart.prototype.setPaper = function (paper) {\r\n if (this.svgContainer) {\r\n this.svgContainer.hideOverflow = true;\r\n }\r\n return _super.prototype.setPaper.call(this, paper);\r\n };\r\n Object.defineProperty(MapChart.prototype, \"backgroundSeries\", {\r\n /**\r\n * Background series will create polygons that will fill all the map area\r\n * with some color (or other fill).\r\n *\r\n * This might be useful with non-rectangular projections, like Orthographic,\r\n * Albers, etc.\r\n *\r\n * To change background color/opacity access polygon template.\r\n *\r\n * ```TypeScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JavaScript\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fill = am4core.color(\"#fff\");\r\n * chart.backgroundSeries.mapPolygons.template.polygon.fillOpacity = 0.1;\r\n * ```\r\n * ```JSON\r\n * {\r\n * \"backgroundSeries\": {\r\n * \"mapPolygons\": {\r\n * \"polygon\": {\r\n * \"fill\": \"#fff\",\r\n * \"fillOpacity\": 0.1\r\n * }\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.0\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._backgroundSeries) {\r\n var backgroundSeries = new MapPolygonSeries();\r\n backgroundSeries.parent = this.seriesContainer;\r\n backgroundSeries.chart = this;\r\n backgroundSeries.hiddenInLegend = true;\r\n backgroundSeries.mapPolygons.template.focusable = false;\r\n backgroundSeries.addDisposer(new Disposer(function () {\r\n _this._backgroundSeries = undefined;\r\n }));\r\n this._disposers.push(backgroundSeries);\r\n var interfaceColors = new InterfaceColorSet();\r\n var color = interfaceColors.getFor(\"background\");\r\n var polygonTemplate = backgroundSeries.mapPolygons.template.polygon;\r\n polygonTemplate.stroke = color;\r\n polygonTemplate.fill = color;\r\n polygonTemplate.fillOpacity = 0;\r\n polygonTemplate.strokeOpacity = 0;\r\n //polygonTemplate.focusable = false;\r\n backgroundSeries.mapPolygons.create();\r\n this._backgroundSeries = backgroundSeries;\r\n }\r\n return this._backgroundSeries;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Prepares the legend instance for use in this chart.\r\n *\r\n * @param legend Legend\r\n */\r\n MapChart.prototype.setLegend = function (legend) {\r\n _super.prototype.setLegend.call(this, legend);\r\n if (legend) {\r\n legend.parent = this;\r\n }\r\n };\r\n /**\r\n * @param value Tap to activate?\r\n */\r\n MapChart.prototype.setTapToActivate = function (value) {\r\n _super.prototype.setTapToActivate.call(this, value);\r\n // setup other containers\r\n this.seriesContainer.interactions.isTouchProtected = true;\r\n this.panSprite.interactions.isTouchProtected = true;\r\n };\r\n MapChart.prototype.handleTapToActivate = function () {\r\n _super.prototype.handleTapToActivate.call(this);\r\n this.seriesContainer.interactions.isTouchProtected = false;\r\n this.panSprite.interactions.isTouchProtected = false;\r\n };\r\n MapChart.prototype.handleTapToActivateDeactivation = function () {\r\n _super.prototype.handleTapToActivateDeactivation.call(this);\r\n this.seriesContainer.interactions.isTouchProtected = true;\r\n this.panSprite.interactions.isTouchProtected = true;\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 MapChart.prototype.asFunction = function (field) {\r\n return field == \"zoomEasing\" || _super.prototype.asIs.call(this, field);\r\n };\r\n /**\r\n * @ignore\r\n * @return Has license?\r\n */\r\n MapChart.prototype.hasLicense = function () {\r\n if (options.commercialLicense) {\r\n return true;\r\n }\r\n if (!_super.prototype.hasLicense.call(this)) {\r\n return false;\r\n }\r\n for (var i = 0; i < options.licenses.length; i++) {\r\n if (options.licenses[i].match(/^MP.{5,}/i)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n return MapChart;\r\n}(SerialChart));\r\nexport { MapChart };\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[\"MapChart\"] = MapChart;\r\n//# sourceMappingURL=MapChart.js.map","/**\r\n * Percent chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { PercentSeries } from \"../series/PercentSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PercentChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PercentChartDataItem = /** @class */ (function (_super) {\r\n __extends(PercentChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PercentChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { PercentChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This is a base class for \"percent-based\" chart types like Pie and Funnel.\r\n *\r\n * @see {@link IPercentChartEvents} for a list of available Events\r\n * @see {@link IPercentChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for Pie chart documentation\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for Sliced chart documentation\r\n */\r\nvar PercentChart = /** @class */ (function (_super) {\r\n __extends(PercentChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PercentChart\";\r\n _this.align = \"none\";\r\n _this.valign = \"none\";\r\n // so that the chart is always drawn, even the legend wants all the space\r\n _this.chartContainer.minHeight = 50;\r\n _this.chartContainer.minWidth = 50;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates chart data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentChart.prototype.validateData = function () {\r\n _super.prototype.validateData.call(this);\r\n this.feedLegend();\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n PercentChart.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.hiddenInLegend) {\r\n $iter.each(series.dataItems.iterator(), function (dataItem) {\r\n if (!dataItem.hiddenInLegend) {\r\n legendData_1.push(dataItem);\r\n if (!dataItem.legendSettings) {\r\n dataItem.legendSettings = series.legendSettings;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n legend.data = legendData_1;\r\n legend.dataFields.name = \"category\";\r\n }\r\n };\r\n /**\r\n * Creates a new [[PercentSeries]].\r\n *\r\n * @return New series\r\n */\r\n PercentChart.prototype.createSeries = function () {\r\n return new PercentSeries();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n PercentChart.prototype.setLegend = function (legend) {\r\n _super.prototype.setLegend.call(this, legend);\r\n if (legend) {\r\n legend.labels.template.text = \"{category}\";\r\n legend.valueLabels.template.text = \"{value.percent.formatNumber('#.0p')}\";\r\n legend.itemContainers.template.events.on(\"over\", function (event) {\r\n var percentSeriesDataItem = event.target.dataItem.dataContext;\r\n if (percentSeriesDataItem.visible && !percentSeriesDataItem.isHiding) {\r\n var slice = percentSeriesDataItem.slice;\r\n slice.dispatchImmediately(\"over\");\r\n slice.isHover = true;\r\n slice.interactions.isRealHover = true;\r\n }\r\n });\r\n legend.itemContainers.template.events.on(\"out\", function (event) {\r\n var percentSeriesDataItem = event.target.dataItem.dataContext;\r\n var slice = percentSeriesDataItem.slice;\r\n slice.dispatchImmediately(\"out\");\r\n slice.isHover = false;\r\n });\r\n }\r\n };\r\n return PercentChart;\r\n}(SerialChart));\r\nexport { PercentChart };\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 * @hidden\r\n */\r\nregistry.registeredClasses[\"PercentChart\"] = PercentChart;\r\nregistry.registeredClasses[\"PercentChartDataItem\"] = PercentChartDataItem;\r\n//# sourceMappingURL=PercentChart.js.map","/**\r\n * Pie chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, PercentChartDataItem } from \"./PercentChart\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PieSeries } from \"../series/PieSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieChartDataItem = /** @class */ (function (_super) {\r\n __extends(PieChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PieChartDataItem;\r\n}(PercentChartDataItem));\r\nexport { PieChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Pie chart.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"PieSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChartEvents} for a list of available Events\r\n * @see {@link IPieChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nvar PieChart = /** @class */ (function (_super) {\r\n __extends(PieChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PieChart\";\r\n // Set defaults\r\n _this.innerRadius = 0;\r\n _this.radius = percent(80);\r\n _this.align = \"none\";\r\n _this.valign = \"none\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n var seriesContainer = _this.seriesContainer;\r\n seriesContainer.isMeasured = true;\r\n seriesContainer.valign = \"middle\";\r\n seriesContainer.align = \"center\";\r\n seriesContainer.layout = \"absolute\";\r\n seriesContainer.width = undefined;\r\n seriesContainer.height = undefined;\r\n // so that the pie is always drawn, even the legend wants all the space\r\n _this.chartContainer.minHeight = 50;\r\n _this.chartContainer.minWidth = 50;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.updateRadius, _this, false); // need this for the chart to change radius if legend is removed/disabled\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PieChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pie chart\");\r\n }\r\n };\r\n /**\r\n * (Re)validates the chart, causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieChart.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.updateRadius();\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PieChart.prototype.handleSeriesAdded = function (event) {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n this._chartPixelRadius = undefined;\r\n this.updateSeriesAngles();\r\n };\r\n PieChart.prototype.updateSeriesAngles = function () {\r\n var _this = this;\r\n this.series.each(function (series) {\r\n series._startAngleInternal = _this.startAngle;\r\n series._endAngleInternal = _this.endAngle;\r\n //series.defaultState.properties.startAngle = this.startAngle;\r\n //series.defaultState.properties.endAngle = this.endAngle;\r\n });\r\n };\r\n /**\r\n * Recalculates pie's radius, based on a number of criteria.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieChart.prototype.updateRadius = function () {\r\n var chartCont = this.chartContainer;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n var innerRadius = this.innerRadius;\r\n if (innerRadius instanceof Percent) {\r\n innerRect = $math.getArcRect(this.startAngle, this.endAngle, innerRadius.value);\r\n }\r\n // @todo handle this when innerRadius set in pixels (do it for radar also)\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(chartCont.innerWidth / rect.width, chartCont.innerHeight / rect.height);\r\n if (!$type.isNumber(maxRadius)) {\r\n maxRadius = 0;\r\n }\r\n var chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n var chartPixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, maxRadius);\r\n var seriesRadius = (chartRadius - chartPixelInnerRadius) / this.series.length;\r\n if (chartRadius != this._chartPixelRadius || chartPixelInnerRadius != this._chartPixelInnerRadius) {\r\n this._chartPixelRadius = chartRadius;\r\n this._chartPixelInnerRadius = chartPixelInnerRadius;\r\n //@todo: make it possible to set series radius in percent\r\n $iter.each($iter.indexed(this.series.iterator()), function (a) {\r\n var i = a[0];\r\n var series = a[1];\r\n var radius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.radius, chartRadius - chartPixelInnerRadius);\r\n var innerRadius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.innerRadius, chartRadius - chartPixelInnerRadius);\r\n if (!$type.isNumber(radius)) {\r\n radius = chartPixelInnerRadius + seriesRadius * (i + 1);\r\n }\r\n if (!$type.isNumber(innerRadius)) {\r\n innerRadius = chartPixelInnerRadius + seriesRadius * i;\r\n }\r\n series.pixelRadius = radius;\r\n series.pixelInnerRadius = innerRadius;\r\n });\r\n this.seriesContainer.definedBBox = { x: chartRadius * rect.x, y: chartRadius * rect.y, width: chartRadius * rect.width, height: chartRadius * rect.height };\r\n this.seriesContainer.invalidateLayout();\r\n this.bulletsContainer.x = this.seriesContainer.x;\r\n this.bulletsContainer.y = this.seriesContainer.y;\r\n }\r\n };\r\n Object.defineProperty(PieChart.prototype, \"radius\", {\r\n /**\r\n * @return Radius (px or relative)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Sets radius of the pie chart.\r\n *\r\n * Setting to a number will mean a fixed pixel radius.\r\n *\r\n * Setting to an instance of [[Percent]] will mean a relative radius to\r\n * available space.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.radius = am4core.percent(50);\r\n * ```\r\n * ```JavaScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.radius = am4core.percent(50);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // Set pie chart to be at 50% of the available space\r\n * \"radius\": \"50%\"\r\n * }\r\n * ```\r\n *\r\n * @default 80%\r\n * @param value Radius (px or relative)\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n this.invalidateLayout();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart.prototype, \"innerRadius\", {\r\n /**\r\n * @return Relative inner radius (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Sets relative inner radius (to create a donut chart).\r\n *\r\n * Setting to a number will mean a fixed pixel radius.\r\n *\r\n * Setting to an instance of [[Percent]] will mean a relative radius to\r\n * available space.\r\n *\r\n * NOTE: it's not related to `radius`.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.innerRadius = am4core.percent(50);\r\n * ```\r\n * ```JavaScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.innerRadius = am4core.percent(50);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // Set pie chart to be at 50% of the available space\r\n * \"innerRadius\": \"50%\"\r\n * }\r\n * ```\r\n *\r\n * @default 0\r\n * @param value Relative inner radius (0-1)\r\n * @todo Setting things like `innerRadius` modifies `slice.radius` and it then looks like it is not the same value as in default state\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a new [[PieSeries]].\r\n *\r\n * @return New series\r\n */\r\n PieChart.prototype.createSeries = function () {\r\n return new PieSeries();\r\n };\r\n Object.defineProperty(PieChart.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Pie circle. (degrees)\r\n *\r\n * Normally, a pie chart begins (the left side of the first slice is drawn)\r\n * at the top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the first slice be drawn to the right.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set to those lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n * looks like a quarter of a circle.\r\n *\r\n * NOTE: This setting is not supported in a 3D pie chart.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startAngle\", value)) {\r\n this.updateRadius();\r\n this.updateSeriesAngles();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * End angle of the Pie circle. (degrees)\r\n *\r\n * Normally, a pie chart ends (the right side of the last slice is drawn)\r\n * at the top center. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to change this setting.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set to those lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n * looks like a quarter of a circle.\r\n *\r\n * NOTE: This setting is not supported in a 3D pie chart.\r\n *\r\n * @default 270\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endAngle\", value)) {\r\n this.updateRadius();\r\n this.updateSeriesAngles();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieChart;\r\n}(PercentChart));\r\nexport { PieChart };\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[\"PieChart\"] = PieChart;\r\nregistry.registeredClasses[\"PieChartDataItem\"] = PieChartDataItem;\r\n//# sourceMappingURL=PieChart.js.map","/**\r\n * 3D Pie chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PieChart, PieChartDataItem } from \"./PieChart\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieChart3DDataItem = /** @class */ (function (_super) {\r\n __extends(PieChart3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieChart3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PieChart3DDataItem;\r\n}(PieChartDataItem));\r\nexport { PieChart3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"Pie3DChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"Pie3DSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nvar PieChart3D = /** @class */ (function (_super) {\r\n __extends(PieChart3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart3D() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PieChart3D\";\r\n _this.depth = 20;\r\n _this.angle = 10;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieChart3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth of the 3D pie in pixels.\r\n *\r\n * This will determine \"height\" of the pie.\r\n *\r\n * @default 20\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"depth\", value)) {\r\n this.invalidateDataUsers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * An angle of a \"point of view\" in degrees. Possible range 0 - 90.\r\n *\r\n * @default 10\r\n * @param value Angle (degrees)\r\n */\r\n set: function (value) {\r\n value = $math.fitToRange(value, 0, 90);\r\n if (this.setPropertyValue(\"angle\", value)) {\r\n this.invalidateDataUsers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a new Series.\r\n *\r\n * @return New series\r\n */\r\n PieChart3D.prototype.createSeries = function () {\r\n return new PieSeries3D();\r\n };\r\n return PieChart3D;\r\n}(PieChart));\r\nexport { PieChart3D };\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[\"PieChart3D\"] = PieChart3D;\r\n//# sourceMappingURL=PieChart3D.js.map","/**\r\n * Radar chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarChartDataItem = /** @class */ (function (_super) {\r\n __extends(RadarChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarChartDataItem;\r\n}(XYChartDataItem));\r\nexport { RadarChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nvar RadarChart = /** @class */ (function (_super) {\r\n __extends(RadarChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Defines X axis renderer type.\r\n */\r\n _this._axisRendererX = AxisRendererCircular;\r\n /**\r\n * Defines Y axis renderer type.\r\n */\r\n _this._axisRendererY = AxisRendererRadial;\r\n /**\r\n * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n * @ignore Exclude from docs\r\n */\r\n _this.innerRadiusModifyer = 1;\r\n /**\r\n * @ignore\r\n */\r\n _this.mr = 1;\r\n _this.className = \"RadarChart\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.radius = percent(80);\r\n _this.innerRadius = 0;\r\n var radarContainer = _this.plotContainer.createChild(Container);\r\n radarContainer.shouldClone = false;\r\n radarContainer.layout = \"absolute\";\r\n radarContainer.align = \"center\";\r\n radarContainer.valign = \"middle\";\r\n _this.seriesContainer.parent = radarContainer;\r\n _this.radarContainer = radarContainer;\r\n _this.bulletsContainer.parent = radarContainer;\r\n _this.axisBulletsContainer = radarContainer;\r\n _this._cursorContainer = radarContainer;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.invalidate, _this, false); // need this for the chart to change radius if legend is removed/disabled\r\n _this._bulletMask = radarContainer.createChild(Circle);\r\n _this._bulletMask.shouldClone = false;\r\n _this._bulletMask.element = _this.paper.add(\"path\");\r\n _this._bulletMask.opacity = 0;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n RadarChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Radar chart\");\r\n }\r\n };\r\n /**\r\n * Decorates Axis with required properties for this chart.\r\n *\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.processAxis = function (axis) {\r\n _super.prototype.processAxis.call(this, axis);\r\n var renderer = axis.renderer;\r\n renderer.gridContainer.parent = renderer;\r\n renderer.breakContainer.parent = renderer;\r\n axis.parent = this.radarContainer;\r\n renderer.toBack();\r\n };\r\n /**\r\n * Updates all X axes after range change event.\r\n */\r\n RadarChart.prototype.handleXAxisRangeChange = function () {\r\n _super.prototype.handleXAxisRangeChange.call(this);\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.invalidate();\r\n });\r\n };\r\n /**\r\n * Updates all Y axes after range change event.\r\n */\r\n RadarChart.prototype.handleYAxisRangeChange = function () {\r\n _super.prototype.handleYAxisRangeChange.call(this);\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n axis.invalidate();\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 RadarChart.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up cursor\r\n if ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n config.cursor.type = \"RadarCursor\";\r\n }\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"RadarSeries\";\r\n }\r\n }\r\n // Set up axes\r\n /*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n for (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n config.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n }\r\n }\r\n if ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n for (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n config.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n }\r\n }*/\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Does calculations before drawing the chart.\r\n */\r\n RadarChart.prototype.beforeDraw = function () {\r\n _super.prototype.beforeDraw.call(this);\r\n var plotContainer = this.plotContainer;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n var wr = plotContainer.innerWidth / rect.width;\r\n var hr = plotContainer.innerHeight / rect.height;\r\n var innerRadius = this.innerRadius;\r\n if (innerRadius instanceof Percent) {\r\n var value = innerRadius.value;\r\n var mr = Math.min(wr, hr);\r\n this.mr = mr;\r\n value = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n innerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n this.innerRadiusModifyer = value / innerRadius.value;\r\n innerRadius = percent(value * 100);\r\n }\r\n // @todo handle this when innerRadius set in pixels (do it for pie also)\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n var diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n var radius = diameter / 2;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n this._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n this._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n if (axis.renderer.useChartAngles) {\r\n axis.renderer.startAngle = startAngle;\r\n axis.renderer.endAngle = endAngle;\r\n }\r\n axis.width = diameter;\r\n axis.height = diameter;\r\n //axis.renderer.width = diameter;\r\n //axis.renderer.height = diameter;\r\n axis.renderer.pixelRadiusReal = radius;\r\n //axis.renderer.innerRadius = innerRadius;\r\n });\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.renderer.startAngle = startAngle;\r\n axis.renderer.endAngle = endAngle;\r\n axis.width = diameter;\r\n axis.height = diameter;\r\n //axis.renderer.width = diameter;\r\n //axis.renderer.height = diameter;\r\n axis.renderer.pixelRadiusReal = radius;\r\n //axis.renderer.innerRadius = innerRadius;\r\n });\r\n var cursor = this.cursor;\r\n if (cursor) {\r\n cursor.width = diameter;\r\n cursor.height = diameter;\r\n cursor.startAngle = startAngle;\r\n cursor.endAngle = endAngle;\r\n }\r\n this.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n this.radarContainer.validatePosition();\r\n };\r\n /**\r\n * Creates and returns a new Series, suitable for RadarChart.\r\n *\r\n * @return New Series\r\n */\r\n RadarChart.prototype.createSeries = function () {\r\n return new RadarSeries();\r\n };\r\n Object.defineProperty(RadarChart.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n * top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the radial axis start horizontally to\r\n * the right, as opposed to vertical.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n * where it has started, forming a full 360 circle. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to end the circle somewhere else.\r\n *\r\n * E.g. setting this to 180 will make the radar face end at horizontal line\r\n * to the left off the center.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the Radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * @return Inner radius in pixels\r\n */\r\n get: function () {\r\n return this._pixelInnerRadius;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * If set in Percent, it will be relative to `radius`. (outer radius)\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Triggers (re)rendering of the horizontal (X) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.updateXAxis = function (renderer) {\r\n //do not call super!\r\n if (renderer) {\r\n renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Triggers (re)rendering of the vertical (Y) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.updateYAxis = function (renderer) {\r\n // do not call super!\r\n if (renderer) {\r\n renderer.processRenderer();\r\n }\r\n };\r\n return RadarChart;\r\n}(XYChart));\r\nexport { RadarChart };\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[\"RadarChart\"] = RadarChart;\r\n//# sourceMappingURL=RadarChart.js.map","/**\r\n * Sankey diagram module.\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 { FlowDiagram, FlowDiagramDataItem } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { SankeyNode } from \"../elements/SankeyNode\";\r\nimport { SankeyLink } from \"../elements/SankeyLink\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[SankeyDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SankeyDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(SankeyDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SankeyDiagramDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SankeyDiagramDataItem;\r\n}(FlowDiagramDataItem));\r\nexport { SankeyDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Sankey Diagram chart.\r\n *\r\n * @see {@link ISankeyDiagramEvents} for a list of available Events\r\n * @see {@link ISankeyDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sankey-diagram/} for documentation\r\n * @important\r\n */\r\nvar SankeyDiagram = /** @class */ (function (_super) {\r\n __extends(SankeyDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SankeyDiagram\";\r\n _this.orientation = \"horizontal\";\r\n _this.nodeAlign = \"middle\";\r\n _this.nodesContainer.width = percent(100);\r\n _this.nodesContainer.height = percent(100);\r\n _this.linksContainer.width = percent(100);\r\n _this.linksContainer.height = percent(100);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates chart's data, effectively causing the chart to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyDiagram.prototype.validateData = function () {\r\n var _this = this;\r\n this._valueHeight = undefined;\r\n _super.prototype.validateData.call(this);\r\n this._levelCount = 0;\r\n this.nodes.each(function (key, node) {\r\n node.level = undefined;\r\n });\r\n this.nodes.each(function (key, node) {\r\n node.level = _this.getNodeLevel(node, 0);\r\n _this._levelCount = $math.max(_this._levelCount, node.level);\r\n });\r\n };\r\n /**\r\n * Returns node's highest level.\r\n *\r\n * @param node Node\r\n * @param level Current level\r\n * @return New level\r\n */\r\n SankeyDiagram.prototype.getNodeLevel = function (node, level) {\r\n var _this = this;\r\n var levels = [level];\r\n $iter.each(node.incomingDataItems.iterator(), function (link) {\r\n if (link.fromNode) {\r\n if ($type.isNumber(link.fromNode.level)) {\r\n levels.push(link.fromNode.level + 1);\r\n }\r\n else {\r\n _this._counter = 0;\r\n _this.checkLoop(link.fromNode);\r\n if (_this._counter < _this.dataItems.length) {\r\n levels.push(_this.getNodeLevel(link.fromNode, level + 1));\r\n }\r\n }\r\n }\r\n });\r\n return Math.max.apply(Math, __spread(levels));\r\n };\r\n /**\r\n * Checks if there's no loop in the ancestor chain.\r\n *\r\n * @param node Node\r\n */\r\n SankeyDiagram.prototype.checkLoop = function (node) {\r\n var _this = this;\r\n this._counter++;\r\n if (this._counter > this.dataItems.length) {\r\n return;\r\n }\r\n $iter.each(node.incomingDataItems.iterator(), function (link) {\r\n _this.checkLoop(link.fromNode);\r\n });\r\n };\r\n /**\r\n * Calculates relation between pixel height and total value.\r\n *\r\n * In Sankey the actual thickness of links and height of nodes will depend\r\n * on their values.\r\n */\r\n SankeyDiagram.prototype.calculateValueHeight = function () {\r\n var _this = this;\r\n // calculate sums of each level\r\n this._levelSum = {};\r\n this._levelNodesCount = {};\r\n this.maxSum = 0;\r\n var total = this.dataItem.values.value.sum;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n _this.getNodeValue(node);\r\n });\r\n this.nodes.each(function (key, node) {\r\n var level = node.level;\r\n var value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n if (value / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n if ($type.isNumber(_this._levelSum[level])) {\r\n _this._levelSum[level] += value;\r\n }\r\n else {\r\n _this._levelSum[level] = value;\r\n }\r\n if ($type.isNumber(_this._levelNodesCount[level])) {\r\n _this._levelNodesCount[level]++;\r\n }\r\n else {\r\n _this._levelNodesCount[level] = 1;\r\n }\r\n });\r\n var availableHeight;\r\n if (this.orientation == \"horizontal\") {\r\n availableHeight = this.chartContainer.maxHeight - 1;\r\n }\r\n else {\r\n availableHeight = this.chartContainer.maxWidth - 1;\r\n }\r\n var maxSumLevel;\r\n var minHeight;\r\n $object.each(this._levelSum, function (key, value) {\r\n var realValue = value;\r\n var levelNodeCount = _this._levelNodesCount[key];\r\n var valueHeight = (availableHeight - (levelNodeCount - 1) * _this.nodePadding) / realValue;\r\n if (valueHeight == Infinity) {\r\n valueHeight = 0;\r\n }\r\n if (minHeight > valueHeight || !$type.isNumber(minHeight)) {\r\n minHeight = valueHeight;\r\n _this.maxSum = realValue;\r\n maxSumLevel = $type.toNumber(key);\r\n }\r\n });\r\n this._maxSumLevel = maxSumLevel;\r\n var maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n var valueHeight = (availableHeight - (maxSumLevelNodeCount - 1) * this.nodePadding) / this.maxSum;\r\n if (valueHeight == Infinity) {\r\n valueHeight = 0;\r\n }\r\n if (!$type.isNumber(this.valueHeight)) {\r\n this.valueHeight = valueHeight;\r\n }\r\n else {\r\n var finalHeight = void 0;\r\n try {\r\n finalHeight = this._heightAnimation.animationOptions[0].to;\r\n }\r\n catch (err) {\r\n }\r\n // without animations it will be non-smooth as maxValue jumps from one column to another\r\n if (finalHeight != valueHeight) {\r\n var duration = this.interpolationDuration;\r\n try {\r\n duration = this.nodes.template.states.getKey(\"active\").transitionDuration;\r\n }\r\n catch (err) {\r\n }\r\n this._heightAnimation = new Animation(this, { property: \"valueHeight\", from: this.valueHeight, to: valueHeight }, duration, this.interpolationEasing).start();\r\n this._disposers.push(this._heightAnimation);\r\n }\r\n }\r\n };\r\n /**\r\n * Redraws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyDiagram.prototype.validate = function () {\r\n var _this = this;\r\n _super.prototype.validate.call(this);\r\n this.calculateValueHeight();\r\n var container = this.nodesContainer;\r\n var nextCoordinate = {};\r\n var maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n var total = this.dataItem.values.value.sum;\r\n var availableHeight;\r\n if (this.orientation == \"horizontal\") {\r\n availableHeight = this.chartContainer.maxHeight - 1;\r\n }\r\n else {\r\n availableHeight = this.chartContainer.maxWidth - 1;\r\n }\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var level = node.level;\r\n var levelCoordinate = 0;\r\n var nodeCount = _this._levelNodesCount[level];\r\n switch (_this.nodeAlign) {\r\n case \"bottom\":\r\n levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight - (nodeCount - maxSumLevelNodeCount) * _this.nodePadding;\r\n break;\r\n case \"middle\":\r\n levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight / 2 - (nodeCount - maxSumLevelNodeCount) * _this.nodePadding / 2;\r\n break;\r\n }\r\n if (_this.maxSum == 0) {\r\n switch (_this.nodeAlign) {\r\n case \"bottom\":\r\n levelCoordinate = availableHeight - nodeCount * (_this.minNodeSize * availableHeight + _this.nodePadding);\r\n break;\r\n case \"middle\":\r\n levelCoordinate = availableHeight / 2 - nodeCount / 2 * (_this.minNodeSize * availableHeight + _this.nodePadding);\r\n break;\r\n }\r\n }\r\n node.parent = container;\r\n var delta;\r\n var x;\r\n var y;\r\n var value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n if (value / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n if (_this.orientation == \"horizontal\") {\r\n delta = (_this.innerWidth - node.pixelWidth) / _this._levelCount;\r\n x = delta * node.level;\r\n y = nextCoordinate[level] || levelCoordinate;\r\n var h = value * _this.valueHeight;\r\n if (total == 0 && h == 0) {\r\n h = _this.minNodeSize * availableHeight;\r\n }\r\n node.height = h;\r\n node.minX = x;\r\n node.maxX = x;\r\n nextCoordinate[level] = y + h + _this.nodePadding;\r\n }\r\n else {\r\n delta = (_this.innerHeight - node.pixelHeight) / _this._levelCount;\r\n x = nextCoordinate[level] || levelCoordinate;\r\n y = delta * node.level;\r\n var w = value * _this.valueHeight;\r\n if (total == 0 && w == 0) {\r\n w = _this.minNodeSize * availableHeight;\r\n }\r\n node.width = w;\r\n node.minY = y;\r\n node.maxY = y;\r\n nextCoordinate[level] = x + w + _this.nodePadding;\r\n }\r\n node.x = x;\r\n node.y = y;\r\n });\r\n };\r\n /**\r\n * Performs actual operations to reveal this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param duration Fade in duration (ms)\r\n * @return Fade in duration (ms)\r\n */\r\n SankeyDiagram.prototype.showReal = function (duration) {\r\n var _this = this;\r\n if (this.preventShow) {\r\n return;\r\n }\r\n if (this.interpolationDuration > 0) {\r\n var container_1 = this.nodesContainer;\r\n var i_1 = 0;\r\n $iter.each(this.links.iterator(), function (link) {\r\n link.hide(0);\r\n });\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var property;\r\n if (_this.orientation == \"horizontal\") {\r\n node.dx = -(container_1.pixelWidth - node.pixelWidth) / Math.max(_this._levelCount, 1);\r\n property = \"dx\";\r\n }\r\n else {\r\n node.dy = -(container_1.pixelHeight - node.pixelHeight) / Math.max(_this._levelCount, 1);\r\n property = \"dy\";\r\n }\r\n var delay = 0;\r\n var duration = _this.interpolationDuration;\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i_1 + duration * i_1 / $iter.length(_this.nodes.iterator());\r\n }\r\n node.opacity = 0;\r\n node.invalidateLinks();\r\n node.animate([{ property: \"opacity\", from: 0, to: 1 }, { property: property, to: 0 }], _this.interpolationDuration, _this.interpolationEasing).delay(delay);\r\n $iter.each(node.outgoingDataItems.iterator(), function (dataItem) {\r\n var animation = dataItem.link.show(_this.interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n });\r\n $iter.each(node.incomingDataItems.iterator(), function (dataItem) {\r\n if (!dataItem.fromNode) {\r\n var animation = dataItem.link.show(_this.interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n }\r\n });\r\n i_1++;\r\n });\r\n }\r\n return _super.prototype.showReal.call(this);\r\n };\r\n /**\r\n * Changes the sort type of the nodes.\r\n *\r\n * This will actually reshuffle nodes using nice animation.\r\n */\r\n SankeyDiagram.prototype.changeSorting = function () {\r\n var _this = this;\r\n this.sortNodes();\r\n var nextCoordinate = {};\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var level = node.level;\r\n var levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight / 2;\r\n var property;\r\n var nodeHeight;\r\n if (_this.orientation == \"horizontal\") {\r\n property = \"y\";\r\n nodeHeight = node.pixelHeight;\r\n }\r\n else {\r\n property = \"x\";\r\n nodeHeight = node.pixelWidth;\r\n }\r\n node.animate({ property: property, to: nextCoordinate[level] || levelCoordinate }, _this.interpolationDuration, _this.interpolationEasing);\r\n nextCoordinate[level] = (nextCoordinate[level] || levelCoordinate) + nodeHeight + _this.nodePadding;\r\n node.invalidateLinks();\r\n });\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n SankeyDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Sankey diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n SankeyDiagram.prototype.createDataItem = function () {\r\n return new SankeyDiagramDataItem();\r\n };\r\n Object.defineProperty(SankeyDiagram.prototype, \"nodeAlign\", {\r\n /**\r\n * @returns Returns nodeAlign value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nodeAlign\");\r\n },\r\n /**\r\n * How to align nodes. In case layout is vertical, top means left and bottom means right\r\n *\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nodeAlign\", value);\r\n this.changeSorting();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyDiagram.prototype, \"orientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the chart: \"horizontal\" or \"vertical\";\r\n *\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n var nameLabel = this.nodes.template.nameLabel;\r\n if (value == \"vertical\") {\r\n this.nodes.template.width = undefined;\r\n nameLabel.label.horizontalCenter = \"middle\";\r\n nameLabel.locationX = 0.5;\r\n }\r\n else {\r\n this.nodes.template.height = undefined;\r\n nameLabel.label.horizontalCenter = \"left\";\r\n nameLabel.locationX = 1;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.createNode = function () {\r\n var node = new SankeyNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.createLink = function () {\r\n var link = new SankeyLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n Object.defineProperty(SankeyDiagram.prototype, \"valueHeight\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._valueHeight;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (value != this._valueHeight) {\r\n this._valueHeight = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this._sorted = this.nodes.iterator();\r\n };\r\n return SankeyDiagram;\r\n}(FlowDiagram));\r\nexport { SankeyDiagram };\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[\"SankeyDiagram\"] = SankeyDiagram;\r\n//# sourceMappingURL=SankeyDiagram.js.map","/**\r\n * Serial chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, ChartDataItem } from \"../Chart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Series } from \"../series/Series\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[SerialChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SerialChartDataItem = /** @class */ (function (_super) {\r\n __extends(SerialChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SerialChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SerialChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SerialChartDataItem;\r\n}(ChartDataItem));\r\nexport { SerialChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all series-based charts, like XY, Pie, etc.\r\n *\r\n * Is not useful on its own.\r\n *\r\n * @see {@link ISerialChartEvents} for a list of available Events\r\n * @see {@link ISerialChartAdapters} for a list of available Adapters\r\n */\r\nvar SerialChart = /** @class */ (function (_super) {\r\n __extends(SerialChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SerialChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SerialChart\";\r\n _this.colors = new ColorSet();\r\n _this._usesData = false;\r\n // Create a container for series\r\n var seriesContainer = _this.chartContainer.createChild(Container);\r\n seriesContainer.shouldClone = false;\r\n seriesContainer.width = percent(100);\r\n seriesContainer.height = percent(100);\r\n seriesContainer.isMeasured = false;\r\n seriesContainer.layout = \"none\";\r\n seriesContainer.zIndex = 2;\r\n _this.seriesContainer = seriesContainer;\r\n // Create a container for bullets\r\n var bulletsContainer = _this.chartContainer.createChild(Container);\r\n bulletsContainer.shouldClone = false;\r\n bulletsContainer.width = percent(100);\r\n bulletsContainer.height = percent(100);\r\n bulletsContainer.isMeasured = false;\r\n bulletsContainer.zIndex = 3;\r\n bulletsContainer.layout = \"none\";\r\n _this.bulletsContainer = bulletsContainer;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n SerialChart.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this.colors) {\r\n this.colors.dispose();\r\n }\r\n if (this.patterns) {\r\n this.patterns.dispose();\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor\r\n */\r\n SerialChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Serial chart\");\r\n }\r\n };\r\n Object.defineProperty(SerialChart.prototype, \"series\", {\r\n /**\r\n * A list of chart's series.\r\n *\r\n * @return Chart's series\r\n */\r\n get: function () {\r\n if (!this._series) {\r\n this._series = new ListTemplate(this.createSeries());\r\n this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\r\n this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\r\n this._disposers.push(new ListDisposer(this._series, false));\r\n this._disposers.push(this._series.template);\r\n }\r\n return this._series;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n SerialChart.prototype.handleSeriesRemoved = function (event) {\r\n var series = event.oldValue;\r\n this.dataUsers.removeValue(series);\r\n this.dataUsers.each(function (dataUser) {\r\n dataUser.invalidateDataItems();\r\n });\r\n if (series.autoDispose) {\r\n series.dispose();\r\n }\r\n else {\r\n series.parent = undefined;\r\n series.bulletsContainer.parent = undefined;\r\n }\r\n //this.feedLegend();\r\n var legend = this.legend;\r\n if (legend) {\r\n var dataItems = this.legend.dataItems;\r\n for (var i = dataItems.length - 1; i >= 0; i--) {\r\n var dataItem = dataItems.getIndex(i);\r\n if (dataItem && dataItem.dataContext == series) {\r\n legend.dataItems.remove(dataItem);\r\n }\r\n }\r\n for (var i = legend.data.length - 1; i >= 0; i--) {\r\n var di = legend.data[i];\r\n if (di && di == series) {\r\n $array.remove(legend.data, di);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n SerialChart.prototype.handleSeriesAdded = function (event) {\r\n var _this = this;\r\n var series = event.newValue;\r\n if (series.isDisposed()) {\r\n return;\r\n }\r\n series.chart = this;\r\n series.parent = this.seriesContainer;\r\n series.bulletsContainer.parent = this.bulletsContainer;\r\n this._dataUsers.moveValue(series);\r\n series.addDisposer(new Disposer(function () {\r\n _this.dataUsers.removeValue(series);\r\n }));\r\n this.handleSeriesAdded2(series);\r\n this.handleLegendSeriesAdded(series);\r\n };\r\n SerialChart.prototype.handleLegendSeriesAdded = function (series) {\r\n if (!series.hiddenInLegend) {\r\n if (this.legend) {\r\n this.legend.addData(series);\r\n }\r\n }\r\n };\r\n SerialChart.prototype.handleSeriesAdded2 = function (series) {\r\n var _this = this;\r\n if (!this.dataInvalid) {\r\n this._disposers.push(\r\n // on exit only as data is usually passed after push\r\n registry.events.once(\"exitframe\", function () {\r\n if (!series.data || series.data.length == 0) {\r\n series.data = _this.data;\r\n if (series.showOnInit) {\r\n series.reinit();\r\n series.setPropertyValue(\"showOnInit\", false);\r\n series.showOnInit = true;\r\n }\r\n if (!series.isDisposed()) {\r\n series.events.once(\"datavalidated\", function () {\r\n if (series.data == _this.data) {\r\n series._data = [];\r\n }\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n SerialChart.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.hiddenInLegend) {\r\n legendData_1.push(series);\r\n }\r\n });\r\n legend.dataFields.name = \"name\";\r\n legend.data = legendData_1;\r\n }\r\n };\r\n /**\r\n * Creates and returns a new Series, suitable for this chart type.\r\n *\r\n * @return New series\r\n */\r\n SerialChart.prototype.createSeries = function () {\r\n return new Series();\r\n };\r\n Object.defineProperty(SerialChart.prototype, \"colors\", {\r\n /**\r\n * @return Color list\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"colors\");\r\n },\r\n /**\r\n * Chart's color list.\r\n *\r\n * This list can be used by a number of serial items, like applying a new\r\n * color for each Series added. Or, applying a new color for each slice\r\n * of a Pie chart.\r\n *\r\n * Please see [[ColorSet]] for information on how you can set up to generate\r\n * unique colors.\r\n *\r\n * A theme you are using may override default pre-defined colors.\r\n *\r\n * @param value Color list\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"colors\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SerialChart.prototype, \"patterns\", {\r\n /**\r\n * @return Pattern set\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"patterns\");\r\n },\r\n /**\r\n * A [[PatternSet]] to use when creating patterned fills for slices.\r\n *\r\n * @since 4.7.5\r\n * @param value Pattern set\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"patterns\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all parameters from another [[SerialChart]].\r\n *\r\n * @param source Source SerialChart\r\n */\r\n SerialChart.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.series.copyFrom(source.series);\r\n };\r\n /**\r\n * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state.\r\n */\r\n SerialChart.prototype.appear = function () {\r\n _super.prototype.appear.call(this);\r\n this.series.each(function (series) {\r\n if (series.showOnInit && series.inited) {\r\n series.appear();\r\n }\r\n });\r\n };\r\n return SerialChart;\r\n}(Chart));\r\nexport { SerialChart };\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[\"SerialChart\"] = SerialChart;\r\n//# sourceMappingURL=SerialChart.js.map","/**\r\n * Sliced chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, PercentChartDataItem } from \"./PercentChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SlicedChartDataItem = /** @class */ (function (_super) {\r\n __extends(SlicedChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SlicedChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SlicedChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SlicedChartDataItem;\r\n}(PercentChartDataItem));\r\nexport { SlicedChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nvar SlicedChart = /** @class */ (function (_super) {\r\n __extends(SlicedChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SlicedChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SlicedChart\";\r\n _this.seriesContainer.layout = \"horizontal\";\r\n _this.padding(15, 15, 15, 15);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n SlicedChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Sliced chart\");\r\n }\r\n };\r\n /**\r\n * (Re)validates the chart, causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SlicedChart.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n };\r\n return SlicedChart;\r\n}(PercentChart));\r\nexport { SlicedChart };\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[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n//# sourceMappingURL=SlicedChart.js.map","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar TreeMapDataItem = /** @class */ (function (_super) {\r\n __extends(TreeMapDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapDataItem() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Required for squarify functionality.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.rows = [];\r\n _this.className = \"TreeMapDataItem\";\r\n _this.values.value = { workingValue: 0 };\r\n _this.values.x0 = {};\r\n _this.values.y0 = {};\r\n _this.values.x1 = {};\r\n _this.values.y1 = {};\r\n _this.hasChildren.children = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMapDataItem.prototype, \"legendDataItem\", {\r\n /**\r\n * @return Legend data item\r\n */\r\n get: function () {\r\n return this._legendDataItem;\r\n },\r\n /**\r\n * A legend's data item, that corresponds to this data item.\r\n *\r\n * @param value Legend data item\r\n */\r\n set: function (value) {\r\n this._legendDataItem = value;\r\n if (value.label) {\r\n value.label.dataItem = this;\r\n }\r\n if (value.valueLabel) {\r\n value.valueLabel.dataItem = this;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a duration (ms) the Data Item should take to animate from one\r\n * value to another.\r\n *\r\n * If the duration is not specified via parameter, this method will try to\r\n * request a default duration from the related `Component`.\r\n *\r\n * @param duration Default duration (ms)\r\n * @return Duration (ms)\r\n */\r\n TreeMapDataItem.prototype.getDuration = function () {\r\n return 0;\r\n };\r\n Object.defineProperty(TreeMapDataItem.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n var value = 0;\r\n if (!this.children || this.children.length == 0) {\r\n value = this.values[\"value\"].workingValue;\r\n }\r\n else {\r\n $iter.each(this.children.iterator(), function (child) {\r\n var childValue = child.value;\r\n if ($type.isNumber(childValue)) {\r\n value += childValue;\r\n }\r\n });\r\n }\r\n return value;\r\n /*\r\n let value = this.values[\"value\"].workingValue;\r\n \r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n if (this.children) {\r\n $iter.each(this.children.iterator(), (child) => {\r\n if ($type.isNumber(child.value)) {\r\n value += child.value;\r\n }\r\n });\r\n }\r\n }\r\n return value;*/\r\n },\r\n /**\r\n * Numeric value of the item.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"value\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"percent\", {\r\n /**\r\n * Percent value of a node\r\n */\r\n get: function () {\r\n if (this.parent) {\r\n return this.value / this.parent.value * 100;\r\n }\r\n return 100;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"x0\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.values.x0.value;\r\n },\r\n /**\r\n * Item's X position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setValue(\"x0\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"x1\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.values.x1.value;\r\n },\r\n /**\r\n * Item's X position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setValue(\"x1\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"y0\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.values.y0.value;\r\n },\r\n /**\r\n * Item's Y position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setValue(\"y0\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"y1\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.values.y1.value;\r\n },\r\n /**\r\n * Item's Y position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setValue(\"y1\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"name\", {\r\n /**\r\n * @return Name\r\n */\r\n get: function () {\r\n return this.properties.name;\r\n },\r\n /**\r\n * Item's name.\r\n *\r\n * @param name Name\r\n */\r\n set: function (name) {\r\n this.setProperty(\"name\", name);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"children\", {\r\n /**\r\n * @return Item's children\r\n */\r\n get: function () {\r\n return this.properties.children;\r\n },\r\n /**\r\n * A list of item's sub-children.\r\n *\r\n * Having children means that the TreeMap chat will automatically be\r\n * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n * display its children.\r\n *\r\n * Treemap can have any level of nesting.\r\n *\r\n * @param children Item's children\r\n */\r\n set: function (children) {\r\n this.setProperty(\"children\", children);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"level\", {\r\n /**\r\n * Depth level in the treemap hierarchy.\r\n *\r\n * The top-level item will have level set at 0. Its children will have\r\n * level 1, and so on.\r\n *\r\n * @readonly\r\n * @return Level\r\n */\r\n get: function () {\r\n if (!this.parent) {\r\n return 0;\r\n }\r\n else {\r\n return this.parent.level + 1;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"color\", {\r\n /**\r\n * @return Color\r\n */\r\n get: function () {\r\n var color = this.properties.color;\r\n if (color == undefined) {\r\n if (this.parent) {\r\n color = this.parent.color;\r\n }\r\n }\r\n if (color == undefined) {\r\n if (this.component) {\r\n color = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n }\r\n }\r\n return color;\r\n },\r\n /**\r\n * Item's color.\r\n *\r\n * If not set, will use parent's color, or, if that is not set either,\r\n * automatically assigned color from chart's color set. (`chart.colors`)\r\n *\r\n * @param value Color\r\n */\r\n set: function (value) {\r\n this.setProperty(\"color\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"fill\", {\r\n /**\r\n * @ignore\r\n * For the legend to work properly\r\n */\r\n get: function () {\r\n return this.color;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"series\", {\r\n get: function () {\r\n return this._series;\r\n },\r\n /**\r\n * Series of children data items\r\n * @todo: proper descrition\r\n */\r\n set: function (series) {\r\n if (series != this._series) {\r\n if (this._series) {\r\n this.component.series.removeValue(this._series);\r\n this._series.dispose();\r\n }\r\n this._series = series;\r\n this._disposers.push(series);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hides the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param toValue A value to set to `fields` when hiding\r\n * @param fields A list of data fields to set value to `toValue`\r\n */\r\n TreeMapDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n this.setWorkingValue(\"value\", 0);\r\n if (this.children) {\r\n this.children.each(function (child) {\r\n child.hide(duration, delay, toValue, fields);\r\n });\r\n }\r\n var seriesDataItem = this.seriesDataItem;\r\n if (seriesDataItem) {\r\n seriesDataItem.bullets.each(function (key, value) {\r\n value.hide();\r\n value.preventShow = true;\r\n });\r\n }\r\n return _super.prototype.hide.call(this, duration, delay, toValue, fields);\r\n };\r\n /**\r\n * Shows the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param fields A list of fields to set values of\r\n */\r\n TreeMapDataItem.prototype.show = function (duration, delay, fields) {\r\n this.setWorkingValue(\"value\", this.values.value.value);\r\n if (this.children) {\r\n this.children.each(function (child) {\r\n child.show(duration, delay, fields);\r\n });\r\n }\r\n var seriesDataItem = this.seriesDataItem;\r\n if (seriesDataItem) {\r\n seriesDataItem.bullets.each(function (key, value) {\r\n value.preventShow = false;\r\n });\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n return TreeMapDataItem;\r\n}(XYChartDataItem));\r\nexport { TreeMapDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nvar TreeMap = /** @class */ (function (_super) {\r\n __extends(TreeMap, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMap() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * An algorithm used to divide area into squares based on their value.\r\n *\r\n * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n *\r\n * ```TypeScript\r\n * chart.layoutAlgorithm = chart.sliceDice;\r\n * ```\r\n * ```JavaScript\r\n * chart.layoutAlgorithm = chart.sliceDice;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"layoutAlgorithm\": \"sliceDice\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n * @default squarify\r\n */\r\n _this.layoutAlgorithm = _this.squarify;\r\n /**\r\n * Is the chart zoomable?\r\n *\r\n * If the chart is `zoomable`, and items have sub-items, the chart will\r\n * drill-down to sub-items when click on their parent item.\r\n *\r\n * @default true\r\n */\r\n _this.zoomable = true;\r\n _this.className = \"TreeMap\";\r\n _this._usesData = true;\r\n _this.maxLevels = 2;\r\n _this.currentLevel = 0;\r\n _this.hideParentColumns = false;\r\n _this.colors = new ColorSet();\r\n _this.sorting = \"descending\";\r\n // create two value axes for the chart\r\n var xAxis = _this.xAxes.push(new ValueAxis());\r\n xAxis.title.disabled = true;\r\n xAxis.strictMinMax = true;\r\n var xRenderer = xAxis.renderer;\r\n xRenderer.inside = true;\r\n xRenderer.labels.template.disabled = true;\r\n xRenderer.ticks.template.disabled = true;\r\n xRenderer.grid.template.disabled = true;\r\n xRenderer.axisFills.template.disabled = true;\r\n xRenderer.minGridDistance = 100;\r\n xRenderer.line.disabled = true;\r\n xRenderer.baseGrid.disabled = true;\r\n //xRenderer.inversed = true;\r\n var yAxis = _this.yAxes.push(new ValueAxis());\r\n yAxis.title.disabled = true;\r\n yAxis.strictMinMax = true;\r\n var yRenderer = yAxis.renderer;\r\n yRenderer.inside = true;\r\n yRenderer.labels.template.disabled = true;\r\n yRenderer.ticks.template.disabled = true;\r\n yRenderer.grid.template.disabled = true;\r\n yRenderer.axisFills.template.disabled = true;\r\n yRenderer.minGridDistance = 100;\r\n yRenderer.line.disabled = true;\r\n yRenderer.baseGrid.disabled = true;\r\n yRenderer.inversed = true;\r\n // shortcuts\r\n _this.xAxis = xAxis;\r\n _this.yAxis = yAxis;\r\n var template = new TreeMapSeries();\r\n _this.seriesTemplates = new DictionaryTemplate(template);\r\n template.virtualParent = _this;\r\n _this._disposers.push(new DictionaryDisposer(_this.seriesTemplates));\r\n _this._disposers.push(template);\r\n _this.zoomOutButton.events.on(\"hit\", function () {\r\n _this.zoomToChartDataItem(_this._homeDataItem);\r\n }, undefined, false);\r\n _this.seriesTemplates.events.on(\"insertKey\", function (event) {\r\n event.newValue.isTemplate = true;\r\n }, undefined, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMap.prototype, \"navigationBar\", {\r\n /**\r\n * Returns navigationBar if it is added to a chart\r\n */\r\n get: function () {\r\n return this._navigationBar;\r\n },\r\n /**\r\n * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n * drill-down path.\r\n */\r\n set: function (navigationBar) {\r\n var _this = this;\r\n if (this._navigationBar != navigationBar) {\r\n this._navigationBar = navigationBar;\r\n navigationBar.parent = this;\r\n navigationBar.toBack();\r\n navigationBar.links.template.events.on(\"hit\", function (event) {\r\n var dataItem = event.target.dataItem.dataContext;\r\n if (!dataItem.isDisposed()) {\r\n _this.zoomToChartDataItem(dataItem);\r\n _this.createTreeSeries(dataItem);\r\n }\r\n }, undefined, true);\r\n this._disposers.push(navigationBar);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates chart's data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateData = function () {\r\n this.series.clear();\r\n this._tempSeries = [];\r\n _super.prototype.validateData.call(this);\r\n if (this._homeDataItem) {\r\n this._homeDataItem.dispose();\r\n }\r\n var homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n this._homeDataItem = homeDataItem;\r\n $iter.each(this.dataItems.iterator(), function (dataItem) {\r\n dataItem.parent = homeDataItem;\r\n });\r\n homeDataItem.children = this.dataItems;\r\n homeDataItem.x0 = 0;\r\n homeDataItem.y0 = 0;\r\n homeDataItem.name = this._homeText;\r\n var maxX = 1000;\r\n var maxY = Math.round((maxX * this.pixelHeight / this.pixelWidth) / 10) * 10 || 1000;\r\n homeDataItem.x1 = maxX;\r\n homeDataItem.y1 = maxY;\r\n this.xAxis.min = 0;\r\n this.xAxis.max = maxX;\r\n this.xAxis.getMinMax();\r\n this.yAxis.min = 0;\r\n this.yAxis.max = maxY;\r\n this.yAxis.getMinMax();\r\n this.layoutItems(homeDataItem);\r\n this.createTreeSeries(homeDataItem);\r\n this.feedLegend();\r\n };\r\n /**\r\n * Layouts and sizes all items according to their value and\r\n * `layoutAlgorithm`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Parent data item\r\n */\r\n TreeMap.prototype.layoutItems = function (parent, sorting) {\r\n if (parent) {\r\n var children = parent.children;\r\n if (!sorting) {\r\n sorting = this.sorting;\r\n }\r\n if (sorting == \"ascending\") {\r\n children.values.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n }\r\n if (sorting == \"descending\") {\r\n children.values.sort(function (a, b) {\r\n return b.value - a.value;\r\n });\r\n }\r\n this._updateDataItemIndexes(0);\r\n this.layoutAlgorithm(parent);\r\n for (var i = 0, len = children.length; i < len; i++) {\r\n var node = children.getIndex(i);\r\n if (node.children) {\r\n this.layoutItems(node);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Creates and returns a new treemap series.\r\n *\r\n * @todo Description\r\n * @param dataItem Data item to create series out of\r\n */\r\n TreeMap.prototype.createTreeSeries = function (dataItem) {\r\n var _this = this;\r\n this._tempSeries = [];\r\n var navigationData = [dataItem];\r\n // create parent series and navigation data\r\n var parentDataItem = dataItem.parent;\r\n while (parentDataItem != undefined) {\r\n this.initSeries(parentDataItem);\r\n navigationData.push(parentDataItem);\r\n parentDataItem = parentDataItem.parent;\r\n }\r\n navigationData.reverse();\r\n if (this.navigationBar) {\r\n this.navigationBar.data = navigationData;\r\n }\r\n // create series and children series\r\n this.createTreeSeriesReal(dataItem);\r\n // add those which are not in the list\r\n $array.each(this._tempSeries, function (series) {\r\n if (_this.series.indexOf(series) == -1) {\r\n _this.series.push(series);\r\n }\r\n series.zIndex = series.level;\r\n });\r\n };\r\n /**\r\n * [createTreeSeriesReal description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n TreeMap.prototype.createTreeSeriesReal = function (dataItem) {\r\n if (dataItem.children) {\r\n var level = dataItem.level;\r\n if (level < this.currentLevel + this.maxLevels) {\r\n this.initSeries(dataItem);\r\n for (var i = 0; i < dataItem.children.length; i++) {\r\n var child = dataItem.children.getIndex(i);\r\n if (child.children) {\r\n this.createTreeSeriesReal(child);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n TreeMap.prototype.setData = function (value) {\r\n this.currentLevel = 0;\r\n this.currentlyZoomed = undefined;\r\n this.xAxis.start = 0;\r\n this.xAxis.end = 1;\r\n this.yAxis.start = 0;\r\n this.yAxis.end = 1;\r\n _super.prototype.setData.call(this, value);\r\n };\r\n /**\r\n * @ignore\r\n * Overriding, as tree map series are created on the fly all the time\r\n */\r\n TreeMap.prototype.seriesAppeared = function () {\r\n return true;\r\n };\r\n /**\r\n * Initializes the treemap series.\r\n *\r\n * @todo Description\r\n * @param dataItem Chart data item\r\n */\r\n TreeMap.prototype.initSeries = function (dataItem) {\r\n var _this = this;\r\n if (!dataItem.series) {\r\n var series = void 0;\r\n var template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n if (template) {\r\n series = template.clone();\r\n }\r\n else {\r\n series = this.series.create();\r\n }\r\n // for the legend to get {value}\r\n series.dataItem.dataContext = dataItem;\r\n series.name = dataItem.name;\r\n series.parentDataItem = dataItem;\r\n dataItem.series = series;\r\n var level = dataItem.level;\r\n series.level = level;\r\n var dataContext = dataItem.dataContext;\r\n if (dataContext) {\r\n series.config = dataContext.config;\r\n }\r\n this.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n series.data = dataItem.children.values;\r\n series.fill = dataItem.color;\r\n series.columnsContainer.hide(0);\r\n series.bulletsContainer.hide(0);\r\n series.columns.template.adapter.add(\"fill\", function (fill, target) {\r\n var dataItem = target.dataItem;\r\n if (dataItem) {\r\n var treeMapDataItem = dataItem.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n target.fill = treeMapDataItem.color;\r\n target.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n return treeMapDataItem.color;\r\n }\r\n }\r\n });\r\n if (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n series.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n if (this.zoomable) {\r\n series.columns.template.events.on(\"hit\", function (event) {\r\n var seriesDataItem = event.target.dataItem;\r\n if (dataItem.level > _this.currentLevel) {\r\n _this.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n }\r\n else {\r\n _this.zoomToSeriesDataItem(seriesDataItem);\r\n }\r\n }, this, undefined);\r\n }\r\n }\r\n }\r\n this._tempSeries.push(dataItem.series);\r\n };\r\n /**\r\n * Toggles bullets so that labels that belong to current drill level are\r\n * shown.\r\n *\r\n * @param duration Animation duration (ms)\r\n */\r\n TreeMap.prototype.toggleBullets = function (duration) {\r\n var _this = this;\r\n // hide all series which are not in tempSeries\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (_this._tempSeries.indexOf(series) == -1) {\r\n //series.hideReal(duration);\r\n series.columnsContainer.hide();\r\n series.bulletsContainer.hide(duration);\r\n }\r\n else {\r\n //series.showReal(duration);\r\n series.columnsContainer.show();\r\n series.bulletsContainer.show(duration);\r\n series.dataItems.each(function (dataItem) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.show();\r\n });\r\n });\r\n if (series.level < _this.currentLevel) {\r\n if (_this.hideParentColumns) {\r\n series.columnsContainer.hide();\r\n }\r\n series.bulletsContainer.hide(duration);\r\n }\r\n else if (series.level == _this.currentLevel) {\r\n if (_this.maxLevels > 1) {\r\n series.dataItems.each(function (dataItem) {\r\n if (dataItem.treeMapDataItem.children) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.hide();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * Zooms to particular item in series.\r\n *\r\n * @param dataItem Data item\r\n */\r\n TreeMap.prototype.zoomToSeriesDataItem = function (dataItem) {\r\n this.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n };\r\n /**\r\n * Zooms to particular item. If dataItem is not specified, the chart will zoom-out.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n TreeMap.prototype.zoomToChartDataItem = function (dataItem) {\r\n var _this = this;\r\n if (!dataItem) {\r\n dataItem = this._homeDataItem;\r\n }\r\n var zoomOutButton = this.zoomOutButton;\r\n // this is needed because if there is only one fist level, it won't be shown\r\n if (zoomOutButton) {\r\n if (dataItem != this._homeDataItem) {\r\n zoomOutButton.show();\r\n }\r\n else {\r\n zoomOutButton.hide();\r\n }\r\n }\r\n if (dataItem && dataItem.children) {\r\n this.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n this.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n this.currentLevel = dataItem.level;\r\n this.currentlyZoomed = dataItem;\r\n this.createTreeSeries(dataItem);\r\n var rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n if (rangeChangeAnimation && !rangeChangeAnimation.isDisposed() && !rangeChangeAnimation.isFinished()) {\r\n this._dataDisposers.push(rangeChangeAnimation);\r\n rangeChangeAnimation.events.once(\"animationended\", function () {\r\n _this.toggleBullets();\r\n });\r\n }\r\n else {\r\n this.toggleBullets();\r\n }\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n TreeMap.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"TreeMap chart\");\r\n }\r\n //this.homeText = this.language.translate(\"Home\");\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n TreeMap.prototype.createDataItem = function () {\r\n return new TreeMapDataItem();\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"maxLevels\", {\r\n /**\r\n * @return Maximum drill-down level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxLevels\");\r\n },\r\n /**\r\n * Maximum number of levels the chart will display initially.\r\n *\r\n * @default 2\r\n * @param value Maximum drill-down level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxLevels\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"currentLevel\", {\r\n /**\r\n * @return Current level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"currentLevel\");\r\n },\r\n /**\r\n * Current drill-down level the chart is at.\r\n *\r\n * @param value Current level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"currentLevel\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"hideParentColumns\", {\r\n /**\r\n * @return Hide?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideParentColumns\");\r\n },\r\n /**\r\n * If set to `true`, columns of parent nodes will be hidden when user\r\n * drills-down into deeper levels.\r\n *\r\n * @sice 4.7.4\r\n * @default false\r\n * @param value Hide?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideParentColumns\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"sorting\", {\r\n get: function () {\r\n return this.getPropertyValue(\"sorting\");\r\n },\r\n /**\r\n * Sorting direction of treemap items.\r\n *\r\n * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n *\r\n * @default \"descending\"\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"sorting\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a new series of the suitable type.\r\n *\r\n * @return new series\r\n */\r\n TreeMap.prototype.createSeries = function () {\r\n return new TreeMapSeries();\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"homeText\", {\r\n /**\r\n * @return Home text\r\n */\r\n get: function () {\r\n return this._homeText;\r\n },\r\n /**\r\n * A text displayed on the \"home\" button which is used to go back to level 0\r\n * after drill into sub-items.\r\n *\r\n * @param value Home text\r\n */\r\n set: function (value) {\r\n this._homeText = value;\r\n if (this._homeDataItem) {\r\n this._homeDataItem.name = this._homeText;\r\n }\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 TreeMap.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Instantiate layout algorithm\r\n if ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n switch (config[\"layoutAlgorithm\"]) {\r\n case \"squarify\":\r\n config[\"layoutAlgorithm\"] = this.squarify;\r\n break;\r\n case \"binaryTree\":\r\n config[\"layoutAlgorithm\"] = this.binaryTree;\r\n break;\r\n case \"slice\":\r\n config[\"layoutAlgorithm\"] = this.slice;\r\n break;\r\n case \"dice\":\r\n config[\"layoutAlgorithm\"] = this.dice;\r\n break;\r\n case \"sliceDice\":\r\n config[\"layoutAlgorithm\"] = this.sliceDice;\r\n break;\r\n default:\r\n delete config[\"layoutAlgorithm\"];\r\n break;\r\n }\r\n }\r\n // Set type for navigation bar\r\n if ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n config.navigationBar.type = \"NavigationBar\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n }\r\n };\r\n /**\r\n * Measures the size of container and informs its children of how much size\r\n * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n * properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.layoutItems(this.currentlyZoomed);\r\n };\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.layoutItems(this._homeDataItem);\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.validateRawData();\r\n });\r\n this.zoomToChartDataItem(this._homeDataItem);\r\n };\r\n /**\r\n * ==========================================================================\r\n * TREEMAP LAYOUT FUNCTIONS\r\n * ==========================================================================\r\n * @hidden\r\n */\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\r\n * notice,this list of conditions and the following disclaimer in the\r\n * documentation 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\r\n * this 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 * Treemap layout algorithm: binaryTree.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.binaryTree = function (parent) {\r\n var nodes = parent.children, i, n = nodes.length, sum, sums = new Array(n + 1);\r\n for (sums[0] = sum = i = 0; i < n; ++i) {\r\n sums[i + 1] = sum += nodes.getIndex(i).value;\r\n }\r\n if (n > 0) {\r\n partition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n }\r\n function partition(i, j, value, x0, y0, x1, y1) {\r\n if (i >= j - 1) {\r\n var node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.y0 = y0;\r\n node.x1 = x1;\r\n node.y1 = y1;\r\n return;\r\n }\r\n var valueOffset = sums[i], valueTarget = (value / 2) + valueOffset, k = i + 1, hi = j - 1;\r\n while (k < hi) {\r\n var mid = k + hi >>> 1;\r\n if (sums[mid] < valueTarget) {\r\n k = mid + 1;\r\n }\r\n else {\r\n hi = mid;\r\n }\r\n }\r\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) {\r\n --k;\r\n }\r\n var valueLeft = sums[k] - valueOffset, valueRight = value - valueLeft;\r\n if (value == 0) {\r\n var node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.y0 = y0;\r\n node.x1 = x1;\r\n node.y1 = y1;\r\n return;\r\n }\r\n if ((x1 - x0) > (y1 - y0)) {\r\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n partition(i, k, valueLeft, x0, y0, xk, y1);\r\n partition(k, j, valueRight, xk, y0, x1, y1);\r\n }\r\n else {\r\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n partition(i, k, valueLeft, x0, y0, x1, yk);\r\n partition(k, j, valueRight, x0, yk, x1, y1);\r\n }\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: slice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.slice = function (parent) {\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children;\r\n var node;\r\n var i = -1;\r\n var n = nodes.length;\r\n var k = parent.value && (y1 - y0) / parent.value;\r\n while (++i < n) {\r\n node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.x1 = x1;\r\n node.y0 = y0;\r\n y0 += node.value * k;\r\n node.y1 = y0;\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: dice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.dice = function (parent) {\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (x1 - x0) / parent.value;\r\n while (++i < n) {\r\n node = nodes.getIndex(i);\r\n node.y0 = y0;\r\n node.y1 = y1;\r\n node.x0 = x0;\r\n x0 += node.value * k;\r\n node.x1 = x0;\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: slideDice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.sliceDice = function (parent) {\r\n if (parent.level & 1) {\r\n this.slice(parent);\r\n }\r\n else {\r\n this.dice(parent);\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: squarify.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.squarify = function (parent) {\r\n var ratio = (1 + Math.sqrt(5)) / 2;\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children;\r\n var nodeValue;\r\n var i0 = 0;\r\n var i1 = 0;\r\n var n = nodes.length;\r\n var dx;\r\n var dy;\r\n var value = parent.value;\r\n var sumValue;\r\n var minValue;\r\n var maxValue;\r\n var newRatio;\r\n var minRatio;\r\n var alpha;\r\n var beta;\r\n while (i0 < n) {\r\n dx = x1 - x0;\r\n dy = y1 - y0;\r\n // Find the next non-empty node.\r\n do {\r\n sumValue = nodes.getIndex(i1++).value;\r\n } while (!sumValue && i1 < n);\r\n minValue = maxValue = sumValue;\r\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n beta = sumValue * sumValue * alpha;\r\n minRatio = Math.max(maxValue / beta, beta / minValue);\r\n // Keep adding nodes while the aspect ratio maintains or improves.\r\n for (; i1 < n; ++i1) {\r\n sumValue += nodeValue = nodes.getIndex(i1).value;\r\n if (nodeValue < minValue) {\r\n minValue = nodeValue;\r\n }\r\n if (nodeValue > maxValue) {\r\n maxValue = nodeValue;\r\n }\r\n beta = sumValue * sumValue * alpha;\r\n newRatio = Math.max(maxValue / beta, beta / minValue);\r\n if (newRatio > minRatio) {\r\n sumValue -= nodeValue;\r\n break;\r\n }\r\n minRatio = newRatio;\r\n }\r\n // Position and record the row orientation.\r\n var row = this.dataItems.template.clone();\r\n row.value = sumValue;\r\n row.dice = dx < dy;\r\n row.children = nodes.slice(i0, i1);\r\n row.x0 = x0;\r\n row.y0 = y0;\r\n row.x1 = x1;\r\n row.y1 = y1;\r\n if (row.dice) {\r\n row.y1 = value ? (y0 += (dy * sumValue) / value) : y1;\r\n this.dice(row);\r\n }\r\n else {\r\n row.x1 = value ? (x0 += (dx * sumValue) / value) : x1;\r\n this.slice(row);\r\n }\r\n value -= sumValue;\r\n i0 = i1;\r\n }\r\n };\r\n TreeMap.prototype.handleSeriesAdded2 = function () {\r\n // void\r\n };\r\n /**\r\n * [handleDataItemValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n TreeMap.prototype.handleDataItemValueChange = function (dataItem, name) {\r\n if (name == \"value\") {\r\n this.invalidateDataItems();\r\n }\r\n };\r\n TreeMap.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n if (name == \"value\") {\r\n this.invalidateDataItems();\r\n }\r\n };\r\n TreeMap.prototype.getLegendLevel = function (dataItem) {\r\n if (!dataItem) {\r\n return;\r\n }\r\n if (!dataItem.children) {\r\n return;\r\n }\r\n if (dataItem.children.length > 1) {\r\n return dataItem;\r\n }\r\n else if (dataItem.children.length == 1) {\r\n var child = dataItem.children.getIndex(0);\r\n if (child.children) {\r\n return this.getLegendLevel(child);\r\n }\r\n else {\r\n return dataItem;\r\n }\r\n }\r\n else {\r\n return dataItem;\r\n }\r\n };\r\n TreeMap.prototype.handleLegendSeriesAdded = function (series) {\r\n // void\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"homeDataItem\", {\r\n /**\r\n * A data item associated with top node.\r\n *\r\n * @since 4.8.2\r\n */\r\n get: function () {\r\n return this._homeDataItem;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n TreeMap.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n legend.dataFields.name = \"name\";\r\n var legendParent = this.getLegendLevel(this._homeDataItem);\r\n if (legendParent) {\r\n var legendData_1 = [];\r\n legendParent.children.each(function (dataItem) {\r\n //if (!dataItem.hiddenInLegend) {\r\n legendData_1.push(dataItem);\r\n //}\r\n });\r\n legend.data = legendData_1;\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n TreeMap.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this._homeDataItem = undefined;\r\n this.series.clear();\r\n if (this.navigationBar) {\r\n this.navigationBar.disposeData();\r\n }\r\n this.xAxis.disposeData();\r\n this.yAxis.disposeData();\r\n };\r\n /**\r\n * Since this chart uses hierarchical data, we need to remove childrent\r\n * dataField from export of non-hierarchical formats such as CSV and XSLX.\r\n *\r\n * @return Export\r\n */\r\n TreeMap.prototype.getExporting = function () {\r\n var _this = this;\r\n var exporting = _super.prototype.getExporting.call(this);\r\n exporting.adapter.add(\"formatDataFields\", function (info) {\r\n if (info.format == \"csv\" || info.format == \"xlsx\") {\r\n if ($type.hasValue(_this.dataFields.children)) {\r\n delete info.dataFields[_this.dataFields.children];\r\n }\r\n }\r\n return info;\r\n });\r\n return exporting;\r\n };\r\n return TreeMap;\r\n}(XYChart));\r\nexport { TreeMap };\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n//# sourceMappingURL=TreeMap.js.map","/**\r\n * XY Chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { List, ListDisposer } from \"../../core/utils/List\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYChartDataItem = /** @class */ (function (_super) {\r\n __extends(XYChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return XYChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { XYChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates an XY chart, and any derivative chart, like Serial, Date-based, etc.\r\n *\r\n * Basically this is a chart type, that is used to display any chart\r\n * information in a square plot area.\r\n *\r\n * The horizontal and vertical scale is determined by the type of Axis.\r\n *\r\n * The plot types are determined by type of Series.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * let series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"XYChart\");\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * var series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Category axis\r\n * \t\"xAxes\": [{\r\n * \t\t\"type\": \"CategoryAxis\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Value axis\r\n * \t\"yAxes\": [{\r\n * \t\t\"type\": \"ValueAxis\"\r\n * \t}],\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"ColumnSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"categoryX\": \"country\",\r\n * \t\t\t\"valueY\": \"visits\"\r\n * \t\t},\r\n * \t\t\"name\": \"Web Traffic\"\r\n * \t}],\r\n *\r\n * \t// Cursor\r\n * \t\"cursor\": {},\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"USA\",\r\n * \t\t\"visits\": 3025\r\n * \t}, {\r\n * \t\t\"country\": \"China\",\r\n * \t\t\"visits\": 1882\r\n * \t}, {\r\n * \t\t\"country\": \"Japan\",\r\n * \t\t\"visits\": 1809\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"XYChart\");\r\n * ```\r\n *\r\n *\r\n * @see {@link IXYChartEvents} for a list of available Events\r\n * @see {@link IXYChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nvar XYChart = /** @class */ (function (_super) {\r\n __extends(XYChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Defines the type of horizontal axis rederer.\r\n */\r\n _this._axisRendererX = AxisRendererX;\r\n /**\r\n * Defines the type of vertical axis rederer.\r\n */\r\n _this._axisRendererY = AxisRendererY;\r\n /**\r\n * @ignore\r\n */\r\n _this._seriesPoints = [];\r\n _this.className = \"XYChart\";\r\n // Set defaults\r\n //this.margin(10, 10, 10, 10);\r\n _this.maskBullets = true;\r\n _this.arrangeTooltips = true;\r\n // Create main chart container\r\n var chartContainer = _this.chartContainer;\r\n chartContainer.layout = \"vertical\";\r\n _this.padding(15, 15, 15, 15);\r\n // Create top axes container\r\n var topAxesCont = chartContainer.createChild(Container);\r\n topAxesCont.shouldClone = false;\r\n topAxesCont.layout = \"vertical\";\r\n topAxesCont.width = percent(100);\r\n topAxesCont.zIndex = 1;\r\n _this.topAxesContainer = topAxesCont;\r\n // Create vertical axes and plot area container\r\n // Plot area and vertical axes share the whole width of the chart,\r\n // so we need to put then into a separate container so that layouting\r\n // engine takes care of the positioning\r\n var yAxesAndPlotCont = chartContainer.createChild(Container);\r\n yAxesAndPlotCont.shouldClone = false;\r\n yAxesAndPlotCont.layout = \"horizontal\";\r\n yAxesAndPlotCont.width = percent(100);\r\n yAxesAndPlotCont.height = percent(100);\r\n yAxesAndPlotCont.zIndex = 0;\r\n _this.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n // Create a container for bottom axes\r\n var bottomAxesCont = chartContainer.createChild(Container);\r\n bottomAxesCont.shouldClone = false;\r\n bottomAxesCont.width = percent(100);\r\n bottomAxesCont.layout = \"vertical\";\r\n bottomAxesCont.zIndex = 1;\r\n _this.bottomAxesContainer = bottomAxesCont;\r\n // Create a container for left-side axes\r\n var leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n leftAxesCont.shouldClone = false;\r\n leftAxesCont.layout = \"horizontal\";\r\n leftAxesCont.height = percent(100);\r\n leftAxesCont.contentAlign = \"right\";\r\n leftAxesCont.events.on(\"transformed\", _this.updateXAxesMargins, _this, false);\r\n leftAxesCont.zIndex = 1;\r\n _this.leftAxesContainer = leftAxesCont;\r\n // Create a container for plot area\r\n var plotCont = yAxesAndPlotCont.createChild(Container);\r\n plotCont.shouldClone = false;\r\n plotCont.height = percent(100);\r\n plotCont.width = percent(100);\r\n // Create transparend background for plot container so that hover works\r\n // on all of it\r\n plotCont.background.fillOpacity = 0;\r\n _this.plotContainer = plotCont;\r\n // must go below plot container\r\n _this.mouseWheelBehavior = \"none\";\r\n _this._cursorContainer = plotCont;\r\n // Create a container for right-side axes\r\n var rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n rightAxesCont.shouldClone = false;\r\n rightAxesCont.layout = \"horizontal\";\r\n rightAxesCont.height = percent(100);\r\n rightAxesCont.zIndex = 1;\r\n rightAxesCont.events.on(\"transformed\", _this.updateXAxesMargins, _this, false);\r\n _this.rightAxesContainer = rightAxesCont;\r\n _this.seriesContainer.parent = plotCont;\r\n _this.bulletsContainer.parent = plotCont;\r\n var zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n zoomOutButton.shouldClone = false;\r\n zoomOutButton.align = \"right\";\r\n zoomOutButton.valign = \"top\";\r\n zoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n zoomOutButton.marginTop = 5;\r\n zoomOutButton.marginRight = 5;\r\n zoomOutButton.hide(0);\r\n _this.zoomOutButton = zoomOutButton;\r\n // Create a container for bullets\r\n var axisBulletsContainer = _this.plotContainer.createChild(Container);\r\n axisBulletsContainer.shouldClone = false;\r\n axisBulletsContainer.width = percent(100);\r\n axisBulletsContainer.height = percent(100);\r\n axisBulletsContainer.isMeasured = false;\r\n axisBulletsContainer.zIndex = 4;\r\n axisBulletsContainer.layout = \"none\";\r\n _this.axisBulletsContainer = axisBulletsContainer;\r\n _this._bulletMask = _this.plotContainer;\r\n _this.events.on(\"beforedatavalidated\", function () {\r\n _this.series.each(function (series) {\r\n series.dataGrouped = false;\r\n series._baseInterval = {};\r\n });\r\n }, _this, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n XYChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n this.zoomOutButton.exportable = false;\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"X/Y chart\");\r\n }\r\n };\r\n /**\r\n * Draws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n this.seriesContainer.toFront();\r\n this.bulletsContainer.toFront();\r\n if (this.maskBullets) {\r\n this.bulletsContainer.mask = this._bulletMask;\r\n }\r\n this.updateSeriesLegend();\r\n };\r\n /**\r\n * Triggers a redrawing of all chart's series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updatePlotElements = function () {\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.invalidate();\r\n });\r\n };\r\n /**\r\n * Triggers data (re)validation which in turn can cause a redraw of the\r\n * whole chart or just aprticular series / elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.validateData = function () {\r\n // tell axes that data changed\r\n if (this._parseDataFrom == 0) {\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n axis.dataChangeUpdate();\r\n });\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.dataChangeUpdate();\r\n });\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.dataChangeUpdate();\r\n });\r\n }\r\n _super.prototype.validateData.call(this);\r\n };\r\n /**\r\n * Updates margins for horizontal axes based on settings and available space.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updateXAxesMargins = function () {\r\n var leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n var rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n var bottomAxesCont = this.bottomAxesContainer;\r\n if (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n bottomAxesCont.paddingLeft = leftAxesWidth;\r\n bottomAxesCont.paddingRight = rightAxesWidth;\r\n }\r\n var topAxesCont = this.topAxesContainer;\r\n if (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n topAxesCont.paddingLeft = leftAxesWidth;\r\n topAxesCont.paddingRight = rightAxesWidth;\r\n }\r\n };\r\n /**\r\n * Triggers a re-initialization of this element.\r\n *\r\n * Will result in complete redrawing of the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.reinit = function () {\r\n _super.prototype.reinit.call(this);\r\n this.series.each(function (series) {\r\n series.appeared = false;\r\n });\r\n };\r\n /**\r\n * Triggers an update on the horizontal axis when one of its properties\r\n * change.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event An event object\r\n */\r\n XYChart.prototype.handleXAxisChange = function (event) {\r\n this.updateXAxis(event.target);\r\n };\r\n /**\r\n * Triggers an update on the vertical axis when one of its properties\r\n * change.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event An event object\r\n */\r\n XYChart.prototype.handleYAxisChange = function (event) {\r\n this.updateYAxis(event.target);\r\n };\r\n /**\r\n * Sets up a new horizontal (X) axis when it is added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Axis insert event\r\n */\r\n XYChart.prototype.processXAxis = function (event) {\r\n var axis = event.newValue;\r\n axis.chart = this;\r\n if (!axis.renderer) {\r\n axis.renderer = new this._axisRendererX();\r\n axis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this, false);\r\n }\r\n axis.axisLetter = \"X\";\r\n axis.events.on(\"startendchanged\", this.handleXAxisRangeChange, this, false);\r\n //axis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n // Although axis does not use data directly, we set dataProvider here\r\n // (but not add to chart data users) to hold up rendering before data\r\n // is parsed (system handles this)\r\n axis.dataProvider = this;\r\n this.updateXAxis(axis.renderer);\r\n this.processAxis(axis);\r\n };\r\n /**\r\n * Sets up a new vertical (Y) axis when it is added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Axis insert event\r\n */\r\n XYChart.prototype.processYAxis = function (event) {\r\n var axis = event.newValue;\r\n axis.chart = this;\r\n if (!axis.renderer) {\r\n axis.renderer = new this._axisRendererY();\r\n axis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this, false);\r\n }\r\n axis.axisLetter = \"Y\";\r\n axis.events.on(\"startendchanged\", this.handleYAxisRangeChange, this, false);\r\n //axis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n // Although axis does not use data directly, we set dataProvider here\r\n // (but not add to chart data users) to hold up rendering before data\r\n // is parsed (system handles this)\r\n axis.dataProvider = this;\r\n this.updateYAxis(axis.renderer);\r\n this.processAxis(axis);\r\n };\r\n /**\r\n * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n * value range changes.\r\n */\r\n XYChart.prototype.handleXAxisRangeChange = function () {\r\n var range = this.getCommonAxisRange(this.xAxes);\r\n if (this.scrollbarX) {\r\n this.zoomAxes(this.xAxes, range, true);\r\n }\r\n this.toggleZoomOutButton();\r\n this.updateScrollbar(this.scrollbarX, range);\r\n };\r\n /**\r\n * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n * zoomed out or not.\r\n */\r\n XYChart.prototype.toggleZoomOutButton = function () {\r\n if (this.zoomOutButton) {\r\n var show_1 = false;\r\n $iter.eachContinue(this.xAxes.iterator(), function (axis) {\r\n if (axis.toggleZoomOutButton) {\r\n if (axis.maxZoomCount > 0) {\r\n var minZoomFactor = axis.maxZoomFactor / axis.maxZoomCount;\r\n if ($math.round(axis.end - axis.start, 3) < 1 / minZoomFactor) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n else {\r\n if ($math.round(axis.start, 3) > 0 || $math.round(axis.end, 3) < 1) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n $iter.eachContinue(this.yAxes.iterator(), function (axis) {\r\n if (axis.toggleZoomOutButton) {\r\n if (axis.maxZoomCount > 0) {\r\n var minZoomFactor = axis.maxZoomFactor / axis.maxZoomCount;\r\n if ($math.round(axis.end - axis.start, 3) < 1 / minZoomFactor) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n else {\r\n if ($math.round(axis.start, 3) > 0 || $math.round(axis.end, 3) < 1) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n if (!this.seriesAppeared) {\r\n show_1 = false;\r\n }\r\n if (show_1) {\r\n this.zoomOutButton.show();\r\n }\r\n else {\r\n this.zoomOutButton.hide();\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n * moved this check to a separate method so that we could override it in TreeMapSeries\r\n */\r\n XYChart.prototype.seriesAppeared = function () {\r\n var appeared = false;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.appeared) {\r\n appeared = false;\r\n return false;\r\n }\r\n });\r\n return appeared;\r\n };\r\n /**\r\n * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n * value range changes.\r\n */\r\n XYChart.prototype.handleYAxisRangeChange = function () {\r\n var range = this.getCommonAxisRange(this.yAxes);\r\n if (this.scrollbarY) {\r\n this.zoomAxes(this.yAxes, range, true);\r\n }\r\n this.toggleZoomOutButton();\r\n this.updateScrollbar(this.scrollbarY, range);\r\n };\r\n /**\r\n * Updates a relative scrollbar whenever data range of the axis changes.\r\n *\r\n * @param scrollbar Scrollbar instance\r\n * @param range New data (values) range of the axis\r\n */\r\n XYChart.prototype.updateScrollbar = function (scrollbar, range) {\r\n if (scrollbar) {\r\n scrollbar.skipRangeEvents();\r\n scrollbar.start = range.start;\r\n scrollbar.end = range.end;\r\n }\r\n };\r\n /**\r\n * Returns a common range of values between a list of axes.\r\n *\r\n * This is used to synchronize the zoom between multiple axes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axes A list of axes\r\n * @return Common value range\r\n */\r\n XYChart.prototype.getCommonAxisRange = function (axes) {\r\n var start;\r\n var end;\r\n axes.each(function (axis) {\r\n if (!axis.zoomable || (axis instanceof ValueAxis && axis.syncWithAxis)) {\r\n }\r\n else {\r\n var axisStart = axis.start;\r\n var axisEnd = axis.end;\r\n if (axis.renderer.inversed) {\r\n axisStart = 1 - axis.end;\r\n axisEnd = 1 - axis.start;\r\n }\r\n if (!$type.isNumber(start) || (axisStart < start)) {\r\n start = axisStart;\r\n }\r\n if (!$type.isNumber(end) || (axisEnd > end)) {\r\n end = axisEnd;\r\n }\r\n }\r\n });\r\n return { start: start, end: end };\r\n };\r\n /**\r\n * Triggers (re)rendering of the horizontal (X) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.updateXAxis = function (renderer) {\r\n var axis = renderer.axis;\r\n if (renderer.opposite) {\r\n axis.parent = this.topAxesContainer;\r\n axis.toFront();\r\n }\r\n else {\r\n axis.parent = this.bottomAxesContainer;\r\n axis.toBack();\r\n }\r\n if (axis.renderer) {\r\n axis.renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Triggers (re)rendering of the vertical (Y) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.updateYAxis = function (renderer) {\r\n var axis = renderer.axis;\r\n if (renderer.opposite) {\r\n axis.parent = this.rightAxesContainer;\r\n axis.toBack();\r\n }\r\n else {\r\n axis.parent = this.leftAxesContainer;\r\n axis.toFront();\r\n }\r\n if (axis.renderer) {\r\n axis.renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n * and containers for placement.\r\n *\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.processAxis = function (axis) {\r\n var _this = this;\r\n // Value axis does not use data directly, only category axis does\r\n if (axis instanceof CategoryAxis) {\r\n this._dataUsers.moveValue(axis);\r\n }\r\n var renderer = axis.renderer;\r\n renderer.gridContainer.parent = this.plotContainer;\r\n renderer.gridContainer.toBack();\r\n renderer.breakContainer.parent = this.plotContainer;\r\n renderer.breakContainer.toFront();\r\n renderer.breakContainer.zIndex = 10;\r\n axis.addDisposer(new Disposer(function () {\r\n _this.dataUsers.removeValue(axis);\r\n }));\r\n renderer.bulletsContainer.parent = this.axisBulletsContainer;\r\n this._disposers.push(axis.events.on(\"positionchanged\", function () {\r\n var point = $utils.spritePointToSprite({ x: 0, y: 0 }, axis, _this.axisBulletsContainer);\r\n if (axis.renderer instanceof AxisRendererY) {\r\n renderer.bulletsContainer.y = point.y;\r\n }\r\n if (axis.renderer instanceof AxisRendererX) {\r\n renderer.bulletsContainer.x = point.x;\r\n }\r\n }, undefined, false));\r\n this.plotContainer.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n axis.invalidateDataItems();\r\n _this.updateSeriesMasks();\r\n }\r\n }, axis, false);\r\n };\r\n /**\r\n * This is done because for some reason IE doesn't change mask if path of a\r\n * mask changes.\r\n */\r\n XYChart.prototype.updateSeriesMasks = function () {\r\n if ($utils.isIE()) {\r\n this.series.each(function (series) {\r\n var mask = series.mainContainer.mask;\r\n series.mainContainer.mask = undefined;\r\n series.mainContainer.mask = mask;\r\n });\r\n }\r\n };\r\n XYChart.prototype.handleSeriesRemoved = function (event) {\r\n var series = event.oldValue;\r\n if (series) {\r\n if (series.xAxis) {\r\n series.xAxis.series.removeValue(series);\r\n series.xAxis.invalidateProcessedData();\r\n }\r\n if (series.yAxis) {\r\n series.yAxis.series.removeValue(series);\r\n series.yAxis.invalidateProcessedData();\r\n }\r\n // otherwise extremes won't change\r\n this.series.each(function (series) {\r\n series.resetExtremes();\r\n });\r\n }\r\n _super.prototype.handleSeriesRemoved.call(this, event);\r\n };\r\n Object.defineProperty(XYChart.prototype, \"xAxes\", {\r\n /**\r\n * A list of horizontal (X) axes.\r\n *\r\n * @return List of axes\r\n */\r\n get: function () {\r\n if (!this._xAxes) {\r\n this._xAxes = new List();\r\n this._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n this._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n this._disposers.push(new ListDisposer(this._xAxes, false));\r\n }\r\n return this._xAxes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleAxisRemoval = function (event) {\r\n var axis = event.oldValue;\r\n this.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n if (axis.autoDispose) {\r\n axis.dispose();\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"yAxes\", {\r\n /**\r\n * A list of vertical (Y) axes.\r\n *\r\n * @return List of axes\r\n */\r\n get: function () {\r\n if (!this._yAxes) {\r\n this._yAxes = new List();\r\n this._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n this._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n this._disposers.push(new ListDisposer(this._yAxes, false));\r\n }\r\n return this._yAxes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates a new [[XYSeries]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n XYChart.prototype.handleSeriesAdded = function (event) {\r\n try {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n var series = event.newValue;\r\n if (this.xAxes.length == 0 || this.yAxes.length == 0) {\r\n registry.removeFromInvalidComponents(series);\r\n series.dataInvalid = false;\r\n }\r\n $utils.used(series.xAxis); // this is enough to get axis, handled in getter\r\n $utils.used(series.yAxis); // this is enough to get axis, handled in getter\r\n series.maskBullets = series.maskBullets;\r\n if (series.fill == undefined) {\r\n if (this.patterns) {\r\n if (!$type.hasValue(series.stroke)) {\r\n series.stroke = this.colors.next();\r\n }\r\n series.fill = this.patterns.next();\r\n if ($type.hasValue(series.fillOpacity)) {\r\n series.fill.backgroundOpacity = series.fillOpacity;\r\n }\r\n if (series.stroke instanceof Color) {\r\n series.fill.stroke = series.stroke;\r\n series.fill.fill = series.stroke;\r\n }\r\n }\r\n else {\r\n series.fill = this.colors.next();\r\n }\r\n }\r\n if (!$type.hasValue(series.stroke)) {\r\n series.stroke = series.fill;\r\n }\r\n }\r\n catch (e) {\r\n this.raiseCriticalError(e);\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"cursor\", {\r\n /**\r\n * @return Cursor\r\n */\r\n get: function () {\r\n return this._cursor;\r\n },\r\n /**\r\n * Chart's [[Cursor]].\r\n *\r\n * @param cursor Cursor\r\n */\r\n set: function (cursor) {\r\n if (this._cursor != cursor) {\r\n if (this._cursor) {\r\n this.removeDispose(this._cursor);\r\n }\r\n this._cursor = cursor;\r\n if (cursor) {\r\n // TODO this is wrong, fix it\r\n this._disposers.push(cursor);\r\n cursor.chart = this;\r\n cursor.shouldClone = false;\r\n cursor.parent = this._cursorContainer;\r\n cursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n cursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n cursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n cursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n cursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n cursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n cursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n cursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n cursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n if (this.tapToActivate) {\r\n // We need this in order to setup cursor properly\r\n this.setTapToActivate(this.tapToActivate);\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Performs tasks when the cursor's position changes, e.g. shows proper\r\n * tooltips on axes and series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.handleCursorPositionChange = function () {\r\n var cursor = this.cursor;\r\n if (cursor.visible && !cursor.isHiding) {\r\n var xPosition_1 = this.cursor.xPosition;\r\n var yPosition_1 = this.cursor.yPosition;\r\n this.showSeriesTooltip({\r\n x: xPosition_1,\r\n y: yPosition_1\r\n });\r\n var exceptAxes_1 = [];\r\n var snapToSeries = cursor.snapToSeries;\r\n if (snapToSeries && !cursor.downPoint) {\r\n if (snapToSeries instanceof XYSeries) {\r\n snapToSeries = [snapToSeries];\r\n }\r\n var dataItems_1 = [];\r\n $array.each(snapToSeries, function (snpSeries) {\r\n if (!snpSeries.isHidden && !snpSeries.isHiding) {\r\n var xAxis = snpSeries.xAxis;\r\n var yAxis = snpSeries.yAxis;\r\n if (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis) && yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n snpSeries.dataItems.each(function (dataItem) {\r\n dataItems_1.push(dataItem);\r\n });\r\n $array.move(exceptAxes_1, snpSeries.yAxis);\r\n $array.move(exceptAxes_1, snpSeries.xAxis);\r\n }\r\n else {\r\n if (snpSeries.baseAxis == snpSeries.xAxis) {\r\n $array.move(exceptAxes_1, snpSeries.yAxis);\r\n dataItems_1.push(xAxis.getSeriesDataItem(snpSeries, xAxis.toAxisPosition(xPosition_1), true));\r\n }\r\n if (snpSeries.baseAxis == snpSeries.yAxis) {\r\n $array.move(exceptAxes_1, snpSeries.xAxis);\r\n dataItems_1.push(yAxis.getSeriesDataItem(snpSeries, yAxis.toAxisPosition(yPosition_1), true));\r\n }\r\n }\r\n }\r\n });\r\n var closestDataItem_1 = this.getClosest(dataItems_1, xPosition_1, yPosition_1);\r\n if (closestDataItem_1) {\r\n this.series.each(function (series) {\r\n var closestSeries = closestDataItem_1.component;\r\n if (series != closestSeries) {\r\n series.hideTooltip();\r\n if (series.xAxis != closestSeries.xAxis) {\r\n series.xAxis.hideTooltip();\r\n exceptAxes_1.push(series.xAxis);\r\n }\r\n if (series.yAxis != closestSeries.yAxis) {\r\n series.yAxis.hideTooltip();\r\n exceptAxes_1.push(series.yAxis);\r\n }\r\n }\r\n });\r\n closestDataItem_1.component.showTooltipAtDataItem(closestDataItem_1);\r\n cursor.handleSnap(closestDataItem_1.component);\r\n }\r\n }\r\n //}\r\n this._seriesPoints = [];\r\n if (this._cursorXPosition != xPosition_1) {\r\n this.showAxisTooltip(this.xAxes, xPosition_1, exceptAxes_1);\r\n }\r\n if (this._cursorYPosition != yPosition_1) {\r\n this.showAxisTooltip(this.yAxes, yPosition_1, exceptAxes_1);\r\n }\r\n if (this.arrangeTooltips) {\r\n this.sortSeriesTooltips(this._seriesPoints);\r\n }\r\n if (this.legend) {\r\n this.legend.afterDraw();\r\n }\r\n }\r\n };\r\n /**\r\n * Finds closest data item to position out of the array of items.\r\n *\r\n * @since 4.9.29\r\n * @param dataItems Array of items\r\n * @param xPosition X position\r\n * @param yPosition Y position\r\n * @return Data item\r\n */\r\n XYChart.prototype.getClosest = function (dataItems, xPosition, yPosition) {\r\n var minDistance = Infinity;\r\n var closestDataItem;\r\n $array.eachContinue(dataItems, function (dataItem) {\r\n if (dataItem) {\r\n var xAxis = dataItem.component.xAxis;\r\n var yAxis = dataItem.component.yAxis;\r\n var xPos = xAxis.positionToCoordinate(xAxis.toGlobalPosition(xAxis.toAxisPosition(xPosition)));\r\n var yPos = yAxis.positionToCoordinate(yAxis.toGlobalPosition(yAxis.toAxisPosition(yPosition)));\r\n var xField = dataItem.component.xField;\r\n var yField = dataItem.component.yField;\r\n if (xAxis instanceof ValueAxis && !$type.isNumber(dataItem.getValue(xField))) {\r\n return true;\r\n }\r\n if (yAxis instanceof ValueAxis && !$type.isNumber(dataItem.getValue(yField))) {\r\n return true;\r\n }\r\n var dxPosition = xAxis.positionToCoordinate(xAxis.toGlobalPosition(xAxis.getPositionX(dataItem, xField, dataItem.locations[xField], \"valueX\")));\r\n var dyPosition = yAxis.positionToCoordinate(yAxis.toGlobalPosition(yAxis.getPositionY(dataItem, yField, dataItem.locations[yField], \"valueY\")));\r\n var distance = Math.sqrt(Math.pow(xPos - dxPosition, 2) + Math.pow(yPos - dyPosition, 2));\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestDataItem = dataItem;\r\n }\r\n return true;\r\n }\r\n });\r\n return closestDataItem;\r\n };\r\n /**\r\n * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.handleHideCursor = function () {\r\n this.hideObjectTooltip(this.xAxes);\r\n this.hideObjectTooltip(this.yAxes);\r\n this.hideObjectTooltip(this.series);\r\n this._cursorXPosition = undefined;\r\n this._cursorYPosition = undefined;\r\n this.updateSeriesLegend();\r\n };\r\n /**\r\n * Updates values for each series' legend item.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updateSeriesLegend = function () {\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.updateLegendValue();\r\n });\r\n };\r\n /**\r\n * Hides a tooltip for a list of objects.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprites A list of sprites to hide tooltip for\r\n */\r\n XYChart.prototype.hideObjectTooltip = function (sprites) {\r\n $iter.each(sprites.iterator(), function (sprite) {\r\n if (sprite.cursorTooltipEnabled) {\r\n sprite.hideTooltip(0);\r\n }\r\n });\r\n };\r\n /**\r\n * Shows a tooltip for all chart's series, using specific coordinates as a\r\n * reference point.\r\n *\r\n * The tooltip might be shown at different coordinates depending on the\r\n * actual data point's position, overlapping with other tooltips, etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Reference point\r\n */\r\n XYChart.prototype.showSeriesTooltip = function (position) {\r\n var _this = this;\r\n if (!position) {\r\n this.series.each(function (series) {\r\n series.hideTooltip();\r\n });\r\n return;\r\n }\r\n var seriesPoints = [];\r\n this.series.each(function (series) {\r\n //if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n if ((series.xAxis instanceof DateAxis && series.xAxis.snapTooltip) || (series.yAxis instanceof DateAxis && series.yAxis.snapTooltip)) {\r\n // void\r\n }\r\n else {\r\n var point = series.showTooltipAtPosition(position.x, position.y);\r\n if (point) {\r\n series.tooltip.setBounds($utils.spriteRectToSvg({ x: 0, y: 0, width: _this.pixelWidth, height: _this.pixelHeight }, _this));\r\n seriesPoints.push({ series: series, point: point });\r\n }\r\n }\r\n //}\r\n });\r\n if (this.arrangeTooltips) {\r\n this.sortSeriesTooltips(seriesPoints);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.sortSeriesTooltips = function (seriesPoints) {\r\n if (seriesPoints.length > 0) {\r\n var cursor_1 = this.cursor;\r\n if (cursor_1 && $type.isNumber(cursor_1.maxTooltipDistance)) {\r\n var cursorPoint_1 = $utils.spritePointToSvg({ x: cursor_1.point.x, y: cursor_1.point.y }, cursor_1);\r\n var nearestSeries_1;\r\n var nearestPoint_1;\r\n var smallestDistance_1 = Infinity;\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n var series = seriesPoint.series;\r\n var fixedPoint = seriesPoint.point;\r\n if (fixedPoint) {\r\n var point = { x: fixedPoint.x, y: fixedPoint.y };\r\n var distance = Math.abs($math.getDistance(point, cursorPoint_1));\r\n if (distance < smallestDistance_1) {\r\n nearestPoint_1 = point;\r\n smallestDistance_1 = distance;\r\n nearestSeries_1 = series;\r\n }\r\n }\r\n });\r\n var newSeriesPoints_1 = [];\r\n if (nearestSeries_1) {\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n if (Math.abs($math.getDistance(seriesPoint.point, nearestPoint_1)) <= Math.abs(cursor_1.maxTooltipDistance)) {\r\n newSeriesPoints_1.push({ series: seriesPoint.series, point: seriesPoint.point });\r\n }\r\n else {\r\n var tooltipDataItem = seriesPoint.series.tooltipDataItem;\r\n if (tooltipDataItem) {\r\n $array.each(tooltipDataItem.sprites, function (sprite) {\r\n sprite.isHover = false;\r\n sprite.handleOutReal(); // to avoid flicker\r\n });\r\n }\r\n seriesPoint.series.hideTooltip(0);\r\n }\r\n });\r\n if (cursor_1.maxTooltipDistance < 0) {\r\n if (newSeriesPoints_1.length > 0) {\r\n $array.each(newSeriesPoints_1, function (np) {\r\n if (nearestSeries_1 != np.series) {\r\n np.series.hideTooltip(0);\r\n }\r\n });\r\n }\r\n newSeriesPoints_1 = [{ series: nearestSeries_1, point: nearestPoint_1 }];\r\n }\r\n }\r\n seriesPoints = newSeriesPoints_1;\r\n }\r\n var topLeft_1 = $utils.spritePointToSvg({ x: -0.5, y: -0.5 }, this.plotContainer);\r\n var bottomRight_1 = $utils.spritePointToSvg({ x: this.plotContainer.pixelWidth + 0.5, y: this.plotContainer.pixelHeight + 0.5 }, this.plotContainer);\r\n var sum_1 = 0;\r\n var filteredSeriesPoints_1 = [];\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n var point = seriesPoint.point;\r\n if (point && $math.isInRectangle(point, { x: topLeft_1.x, y: topLeft_1.y, width: bottomRight_1.x - topLeft_1.x, height: bottomRight_1.y - topLeft_1.y })) {\r\n filteredSeriesPoints_1.push({ point: point, series: seriesPoint.series });\r\n sum_1 += point.y;\r\n }\r\n });\r\n seriesPoints = filteredSeriesPoints_1;\r\n var firstSeries = this.series.getIndex(0);\r\n var inversed = false;\r\n if (firstSeries && firstSeries.yAxis && firstSeries.yAxis.renderer.inversed) {\r\n inversed = true;\r\n }\r\n if (inversed) {\r\n seriesPoints.sort(function (a, b) { return $number.order(a.point.y, b.point.y); });\r\n }\r\n else {\r\n seriesPoints.sort(function (a, b) { return $number.order(b.point.y, a.point.y); });\r\n seriesPoints.reverse();\r\n }\r\n var averageY = sum_1 / seriesPoints.length;\r\n var maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n if (seriesPoints.length > 0) {\r\n var top_1 = topLeft_1.y;\r\n var bottom = bottomRight_1.y;\r\n // TODO is this needed ?\r\n $utils.spritePointToDocument({ x: 0, y: top_1 }, this);\r\n var dropped = false;\r\n if (averageY > top_1 + (bottom - top_1) / 2) {\r\n var nextHeight = bottom;\r\n for (var i = seriesPoints.length - 1; i >= 0; i--) {\r\n var series = seriesPoints[i].series;\r\n var tooltip = series.tooltip;\r\n var pointY = seriesPoints[i].point.y;\r\n tooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n if (tooltip.invalid) {\r\n tooltip.validate();\r\n }\r\n tooltip.toBack();\r\n nextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\r\n if (nextHeight < -maxY) {\r\n dropped = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (averageY <= top_1 + (bottom - top_1) / 2 || dropped) {\r\n var nextY = top_1;\r\n for (var i = 0, len = seriesPoints.length; i < len; i++) {\r\n var series = seriesPoints[i].series;\r\n var pointY = seriesPoints[i].point.y;\r\n var tooltip = series.tooltip;\r\n tooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n if (tooltip.invalid) {\r\n tooltip.validate();\r\n }\r\n tooltip.toBack();\r\n nextY = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY + tooltip.label.measuredHeight - tooltip.pixelY + pointY + tooltip.pixelMarginBottom }, tooltip).y;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Shows tooltips for a list of axes at specific position.\r\n *\r\n * Position might be X coordinate for horizontal axes, and Y coordinate for\r\n * vertical axes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axes List of axes to show tooltip on\r\n * @param position Position (px)\r\n */\r\n XYChart.prototype.showAxisTooltip = function (axes, position, except) {\r\n var _this = this;\r\n $iter.each(axes.iterator(), function (axis) {\r\n if (!except || except.indexOf(axis) == -1) {\r\n if (_this.dataItems.length > 0 || axis.dataItems.length > 0) {\r\n axis.showTooltipAtPosition(position);\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n *\r\n * @param axis Axis\r\n * @param range Range\r\n * @return Modified range\r\n */\r\n XYChart.prototype.getUpdatedRange = function (axis, range) {\r\n if (!axis) {\r\n return;\r\n }\r\n var start;\r\n var end;\r\n var inversed = axis.renderer.inversed;\r\n if (inversed) {\r\n $math.invertRange(range);\r\n start = 1 - axis.end;\r\n end = 1 - axis.start;\r\n }\r\n else {\r\n start = axis.start;\r\n end = axis.end;\r\n }\r\n var difference = end - start;\r\n return {\r\n start: start + range.start * difference,\r\n end: start + range.end * difference\r\n };\r\n };\r\n /**\r\n * Performs zoom and other operations when user finishes zooming using chart\r\n * cursor, e.g. zooms axes.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorZoomEnd = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n if (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n var xRange = cursor.xRange;\r\n if (xRange && this.xAxes.length > 0) {\r\n xRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n xRange.priority = \"start\";\r\n this.zoomAxes(this.xAxes, xRange);\r\n }\r\n }\r\n if (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n var yRange = cursor.yRange;\r\n if (yRange && this.yAxes.length > 0) {\r\n yRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n yRange.priority = \"start\";\r\n this.zoomAxes(this.yAxes, yRange);\r\n }\r\n }\r\n this.handleHideCursor();\r\n };\r\n /**\r\n * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanStart = function (event) {\r\n var xAxis = this.xAxes.getIndex(0);\r\n if (xAxis) {\r\n this._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n if (xAxis.renderer.inversed) {\r\n this._panStartXRange = $math.invertRange(this._panStartXRange);\r\n }\r\n }\r\n var yAxis = this.yAxes.getIndex(0);\r\n if (yAxis) {\r\n this._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n if (yAxis.renderer.inversed) {\r\n this._panStartYRange = $math.invertRange(this._panStartYRange);\r\n }\r\n }\r\n };\r\n /**\r\n * Performs zoom and other operations when user ends panning\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanEnd = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n if (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n var panEndRange = this._panEndXRange;\r\n var panStartRange = this._panStartXRange;\r\n var delta = 0;\r\n if (panEndRange.start < 0) {\r\n delta = panEndRange.start;\r\n }\r\n if (panStartRange.end > 1) {\r\n if (panEndRange.end > panStartRange.end) {\r\n delta = panEndRange.end - panStartRange.end;\r\n }\r\n }\r\n else if (panEndRange.end > 1) {\r\n delta = panEndRange.end - 1;\r\n }\r\n this.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, cursor.snapOnPan);\r\n this._panEndXRange = undefined;\r\n this._panStartXRange = undefined;\r\n }\r\n if (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n var panEndRange = this._panEndYRange;\r\n var delta = 0;\r\n if (panEndRange.start < 0) {\r\n delta = panEndRange.start;\r\n }\r\n if (panEndRange.end > 1) {\r\n delta = panEndRange.end - 1;\r\n }\r\n this.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, cursor.snapOnPan);\r\n this._panEndYRange = undefined;\r\n this._panStartYRange = undefined;\r\n }\r\n };\r\n XYChart.prototype.handleCursorCanceled = function () {\r\n this._panEndXRange = undefined;\r\n this._panStartXRange = undefined;\r\n };\r\n /**\r\n * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanning = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n var maxPanOut = cursor.maxPanOut;\r\n if (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n var panStartRange = this._panStartXRange;\r\n var range = cursor.xRange;\r\n var axisRange = this.getCommonAxisRange(this.xAxes);\r\n var difference = (panStartRange.end - panStartRange.start);\r\n var delta = range.start * (axisRange.end - axisRange.start);\r\n var newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n var newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n if (newStart <= 0) {\r\n newEnd = newStart + difference;\r\n }\r\n if (newEnd >= 1) {\r\n newStart = newEnd - difference;\r\n }\r\n var newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n this._panEndXRange = newRange;\r\n this.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n }\r\n if (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n var panStartRange = this._panStartYRange;\r\n var range = cursor.yRange;\r\n var axisRange = this.getCommonAxisRange(this.yAxes);\r\n var difference = panStartRange.end - panStartRange.start;\r\n var delta = range.start * (axisRange.end - axisRange.start);\r\n var newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n var newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n if (newStart <= 0) {\r\n newEnd = newStart + difference;\r\n }\r\n if (newEnd >= 1) {\r\n newStart = newEnd - difference;\r\n }\r\n var newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n this._panEndYRange = newRange;\r\n this.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n }\r\n this.handleHideCursor();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleYAxisSet = function (series) {\r\n };\r\n /**\r\n * Performs zoom and other operations when user starts zooming using chart\r\n * cursor, e.g. zooms axes.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorZoomStart = function (event) {\r\n // Nothing here\r\n // This method is here only as a \"placeholder\" for extending classes to\r\n // override if necessary\r\n };\r\n Object.defineProperty(XYChart.prototype, \"scrollbarX\", {\r\n /**\r\n * @return Scrollbar\r\n */\r\n get: function () {\r\n return this._scrollbarX;\r\n },\r\n /**\r\n * Horizontal (X) scrollbar.\r\n *\r\n * @param scrollbar Scrollbar\r\n */\r\n set: function (scrollbar) {\r\n var _this = this;\r\n if (this._scrollbarX) {\r\n this.removeDispose(this._scrollbarX);\r\n }\r\n this._scrollbarX = scrollbar;\r\n if (scrollbar) {\r\n this._disposers.push(scrollbar);\r\n scrollbar.parent = this.topAxesContainer;\r\n scrollbar.shouldClone = false;\r\n scrollbar.startGrip.exportable = false;\r\n scrollbar.endGrip.exportable = false;\r\n scrollbar.toBack();\r\n scrollbar.orientation = \"horizontal\";\r\n scrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n this.events.on(\"datavalidated\", function () { return scrollbar.updateThumb(false); }, this, false);\r\n // accessibility related\r\n scrollbar.adapter.add(\"positionValue\", function (arg) {\r\n var xAxis = _this.xAxes.getIndex(0);\r\n if (xAxis) {\r\n arg.value = xAxis.getPositionLabel(xAxis.renderer.inversed\r\n ? 1 - arg.position\r\n : arg.position);\r\n }\r\n return arg;\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"scrollbarY\", {\r\n /**\r\n * @return Scrollbar\r\n */\r\n get: function () {\r\n return this._scrollbarY;\r\n },\r\n /**\r\n * Vertical (Y) scrollbar.\r\n *\r\n * @param scrollbar Scrollbar\r\n */\r\n set: function (scrollbar) {\r\n var _this = this;\r\n if (this._scrollbarY) {\r\n this.removeDispose(this._scrollbarY);\r\n }\r\n this._scrollbarY = scrollbar;\r\n if (scrollbar) {\r\n this._disposers.push(scrollbar);\r\n scrollbar.parent = this.rightAxesContainer;\r\n scrollbar.startGrip.exportable = false;\r\n scrollbar.shouldClone = false;\r\n scrollbar.endGrip.exportable = false;\r\n scrollbar.toFront();\r\n scrollbar.orientation = \"vertical\";\r\n scrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n this.events.on(\"datavalidated\", function () { return scrollbar.updateThumb(false); }, this, false);\r\n // accessibility related\r\n scrollbar.adapter.add(\"positionValue\", function (arg) {\r\n var yAxis = _this.yAxes.getIndex(0);\r\n if (yAxis) {\r\n arg.value = yAxis.getPositionLabel(arg.position);\r\n }\r\n return arg;\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n * on it changes.\r\n *\r\n * @param event Scrollbar range change event\r\n */\r\n XYChart.prototype.handleXScrollbarChange = function (event) {\r\n if (this.inited) {\r\n var scrollbar = event.target;\r\n var range = scrollbar.range;\r\n if (range.start == 0) {\r\n range.priority = \"start\";\r\n }\r\n if (range.end == 1) {\r\n range.priority = \"end\";\r\n }\r\n range = this.zoomAxes(this.xAxes, range);\r\n scrollbar.fixRange(range);\r\n }\r\n };\r\n /**\r\n * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n * on it changes.\r\n *\r\n * @param event Scrollbar range change event\r\n */\r\n XYChart.prototype.handleYScrollbarChange = function (event) {\r\n if (this.inited) {\r\n var scrollbar = event.target;\r\n var range = scrollbar.range;\r\n if (range.end == 1) {\r\n range.priority = \"end\";\r\n }\r\n if (range.start == 0) {\r\n range.priority = \"start\";\r\n }\r\n range = this.zoomAxes(this.yAxes, range);\r\n scrollbar.fixRange(range);\r\n }\r\n };\r\n /**\r\n * Zooms axes that are affected by to specific relative range.\r\n *\r\n * @param axes List of axes to zoom\r\n * @param range Range of values to zoom to (0-1)\r\n * @param instantly If set to `true` will skip zooming animation\r\n * @return Recalculated range that is common to all involved axes\r\n */\r\n XYChart.prototype.zoomAxes = function (axes, range, instantly, round, declination, stop) {\r\n var realRange = { start: 0, end: 1 };\r\n this.showSeriesTooltip(); // hides\r\n var originalRange = range;\r\n if (!this.dataInvalid) {\r\n $iter.each(axes.iterator(), function (axis) {\r\n var maxZoomFactor = axis.maxZoomFactor;\r\n if ($type.isNumber(axis.minZoomCount)) {\r\n maxZoomFactor = maxZoomFactor / axis.minZoomCount;\r\n }\r\n if (stop && 1 / (range.end - range.start) >= maxZoomFactor) {\r\n // void\r\n }\r\n else {\r\n if (axis.zoomable) {\r\n if (axis.renderer.inversed) {\r\n range = $math.invertRange(originalRange);\r\n }\r\n else {\r\n range = originalRange;\r\n }\r\n axis.hideTooltip(0);\r\n if (round) {\r\n //let diff = range.end - range.start;\r\n if (axis instanceof CategoryAxis) {\r\n var cellWidth = axis.getCellEndPosition(0) - axis.getCellStartPosition(0);\r\n range.start = axis.roundPosition(range.start + cellWidth / 2 - (axis.startLocation) * cellWidth, axis.startLocation);\r\n range.end = axis.roundPosition(range.end - cellWidth / 2 + (1 - axis.endLocation) * cellWidth, axis.endLocation);\r\n }\r\n else {\r\n var d = 0.0001;\r\n range.start = axis.roundPosition(range.start + d, 0, axis.startLocation);\r\n range.end = axis.roundPosition(range.end + d, 0, axis.endLocation);\r\n }\r\n }\r\n var axisRange = axis.zoom(range, instantly, instantly, declination);\r\n if (axis.renderer.inversed) {\r\n axisRange = $math.invertRange(axisRange);\r\n }\r\n realRange = axisRange;\r\n }\r\n }\r\n });\r\n }\r\n return realRange;\r\n };\r\n Object.defineProperty(XYChart.prototype, \"maskBullets\", {\r\n /**\r\n * @return Mask bullet container?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maskBullets\");\r\n },\r\n /**\r\n * Indicates if bullet container is masked.\r\n *\r\n * If it is set to `true`, any bullets that do not fit into bullet container\r\n * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n * of the plot area so they are not cut off.\r\n *\r\n * @param value Mask bullet container?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"maskBullets\", value, true) && this.bulletsContainer) {\r\n if (value) {\r\n this.bulletsContainer.mask = this._bulletMask;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"arrangeTooltips\", {\r\n /**\r\n * @return Arrange tooltips?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"arrangeTooltips\");\r\n },\r\n /**\r\n * Indicates if chart should arrange series tooltips so that they would not\r\n * overlap.\r\n *\r\n * If set to `true` (default), the chart will adjust vertical positions of\r\n * all simultaneously shown tooltips to avoid overlapping.\r\n *\r\n * However, if you have a vertically-arranged chart, it might not make sense,\r\n * because tooltips would most probably not be aligned horizontally. In this\r\n * case it would probably be a good idea to set this setting to `false`.\r\n *\r\n * @default true\r\n * @param value Arrange tooltips?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"arrangeTooltips\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Handles mouse wheel event.\r\n *\r\n * @param event Original event\r\n */\r\n XYChart.prototype.handleWheel = function (event) {\r\n var plotContainer = this.plotContainer;\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n var shift = event.shift.y;\r\n this.handleWheelReal(shift, this.mouseWheelBehavior, plotPoint);\r\n };\r\n /**\r\n * Handles mouse wheel event.\r\n *\r\n * @param event Original event\r\n */\r\n XYChart.prototype.handleHorizontalWheel = function (event) {\r\n var plotContainer = this.plotContainer;\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n this.handleWheelReal(event.shift.x, this.horizontalMouseWheelBehavior, plotPoint);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleWheelReal = function (shift, mouseWheelBehavior, plotPoint) {\r\n if (shift != 0) {\r\n var plotContainer = this.plotContainer;\r\n var rangeX = this.getCommonAxisRange(this.xAxes);\r\n var rangeY = this.getCommonAxisRange(this.yAxes);\r\n var shiftStep = .1;\r\n var maxPanOut = 0;\r\n if (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n var xAxis = this.xAxes.getIndex(0);\r\n var round = false;\r\n var singleItemStep = shiftStep;\r\n if (xAxis instanceof CategoryAxis) {\r\n singleItemStep = .5 / ((rangeX.end - rangeX.start) * xAxis.dataItems.length);\r\n round = true;\r\n }\r\n shiftStep = Math.max(0.2, singleItemStep);\r\n var differenceX = rangeX.end - rangeX.start;\r\n var newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100 * (rangeX.end - rangeX.start));\r\n var newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (rangeX.end - rangeX.start), 1 + maxPanOut);\r\n if (newStartX <= 0) {\r\n newEndX = newStartX + differenceX;\r\n }\r\n if (newEndX >= 1) {\r\n newStartX = newEndX - differenceX;\r\n }\r\n this.zoomAxes(this.xAxes, { start: newStartX, end: newEndX }, undefined, round);\r\n }\r\n if (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n var yAxis = this.yAxes.getIndex(0);\r\n var singleItemStep = shiftStep;\r\n var round = false;\r\n if (yAxis instanceof CategoryAxis) {\r\n singleItemStep = .5 / ((rangeX.end - rangeX.start) * yAxis.dataItems.length);\r\n round = true;\r\n }\r\n shiftStep = Math.max(0.2, singleItemStep);\r\n shift *= -1;\r\n var differenceY = rangeY.end - rangeY.start;\r\n var newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100 * (rangeY.end - rangeY.start));\r\n var newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * (rangeY.end - rangeY.start), 1 + maxPanOut);\r\n if (newStartY <= 0) {\r\n newEndY = newStartY + differenceY;\r\n }\r\n if (newEndY >= 1) {\r\n newStartY = newEndY - differenceY;\r\n }\r\n this.zoomAxes(this.yAxes, { start: newStartY, end: newEndY }, undefined, round);\r\n }\r\n if (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n var locationX = plotPoint.x / plotContainer.maxWidth;\r\n var location2X = this.xAxes.getIndex(0).toAxisPosition(locationX);\r\n var newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * (rangeX.end - rangeX.start) * shift / 100 * locationX);\r\n newStartX = Math.min(newStartX, location2X);\r\n var newEndX = Math.min(rangeX.end + shiftStep * (rangeX.end - rangeX.start) * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n newEndX = Math.max(newEndX, location2X);\r\n this.zoomAxes(this.xAxes, { start: newStartX, end: newEndX }, undefined);\r\n }\r\n if (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n var locationY = plotPoint.y / plotContainer.maxHeight;\r\n var location2Y = this.yAxes.getIndex(0).toAxisPosition(locationY);\r\n var newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * (rangeY.end - rangeY.start) * shift / 100 * (1 - locationY));\r\n newStartY = Math.min(newStartY, location2Y);\r\n var newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY * (rangeY.end - rangeY.start), 1 + maxPanOut);\r\n newEndY = Math.max(newEndY, location2Y);\r\n this.zoomAxes(this.yAxes, { start: newStartY, end: newEndY }, undefined);\r\n }\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"mouseWheelBehavior\", {\r\n /**\r\n * @return Mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"mouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies action for when mouse wheel is used when over the chart.\r\n *\r\n * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`,`\"panXY\"`, `\"none\"` (default).\r\n *\r\n * You can control sensitivity of wheel zooming via `mouseOptions`.\r\n *\r\n * @default \"none\"\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer) {\r\n this.plotContainer.wheelable = false;\r\n this.plotContainer.hoverable = false;\r\n this._mouseWheelDisposer.dispose();\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"horizontalMouseWheelBehavior\", {\r\n /**\r\n * @return Horizontal mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"horizontalMouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies action for when horizontal mouse wheel is used when over the chart.\r\n *\r\n * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n *\r\n * @default \"none\"\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"horizontalMouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer2 = this.plotContainer.events.on(\"wheel\", this.handleHorizontalWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer2);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer2) {\r\n this.plotContainer.wheelable = false;\r\n this.plotContainer.hoverable = false;\r\n this._mouseWheelDisposer2.dispose();\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @param fields Array of date fields\r\n * @return Array of date fields populated with chart's date fields\r\n */\r\n XYChart.prototype.dataSourceDateFields = function (fields) {\r\n var _this = this;\r\n // Process parent\r\n fields = _super.prototype.dataSourceDateFields.call(this, fields);\r\n // Check if we have any series with date-fields\r\n $iter.each(this.series.iterator(), function (series) {\r\n fields = _this.populateDataSourceFields(fields, series.dataFields, [\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]);\r\n });\r\n return fields;\r\n };\r\n /**\r\n * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @param value Array of number fields\r\n * @return Array of number fields populated with chart's number fields\r\n */\r\n XYChart.prototype.dataSourceNumberFields = function (fields) {\r\n var _this = this;\r\n fields = _super.prototype.dataSourceDateFields.call(this, fields);\r\n // Check if we have any series with date-fields\r\n $iter.each(this.series.iterator(), function (series) {\r\n fields = _this.populateDataSourceFields(fields, series.dataFields, [\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]);\r\n });\r\n return fields;\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 XYChart.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Save axis ranges for later processing\r\n var xAxes = [];\r\n var yAxes = [];\r\n // Set up axes\r\n if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n for (var i = 0, len = config.xAxes.length; i < len; i++) {\r\n if (!config.xAxes[i].type) {\r\n throw Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n }\r\n else if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n // Maybe convert string dates?\r\n for (var x = 0, len_1 = config.xAxes[i][\"axisRanges\"].length; x < len_1; x++) {\r\n var range = config.xAxes[i][\"axisRanges\"][x];\r\n if ($type.hasValue(range.date) && $type.isString(range.date)) {\r\n range.date = this.dateFormatter.parse(range.date);\r\n }\r\n if ($type.hasValue(range.endDate) && $type.isString(range.endDate)) {\r\n range.endDate = this.dateFormatter.parse(range.endDate);\r\n }\r\n }\r\n xAxes.push({\r\n axisRanges: config.xAxes[i][\"axisRanges\"],\r\n index: i\r\n });\r\n delete (config.xAxes[i][\"axisRanges\"]);\r\n }\r\n }\r\n }\r\n if ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n for (var i = 0, len = config.yAxes.length; i < len; i++) {\r\n if (!config.yAxes[i].type) {\r\n throw Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n }\r\n else if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n // Maybe convert string dates?\r\n for (var x = 0, len_2 = config.yAxes[i][\"axisRanges\"].length; x < len_2; x++) {\r\n var range = config.yAxes[i][\"axisRanges\"][x];\r\n if ($type.hasValue(range.date) && $type.isString(range.date)) {\r\n range.date = this.dateFormatter.parse(range.date);\r\n }\r\n if ($type.hasValue(range.endDate) && $type.isString(range.endDate)) {\r\n range.endDate = this.dateFormatter.parse(range.endDate);\r\n }\r\n }\r\n yAxes.push({\r\n axisRanges: config.yAxes[i][\"axisRanges\"],\r\n index: i\r\n });\r\n delete (config.yAxes[i][\"axisRanges\"]);\r\n }\r\n }\r\n }\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"LineSeries\";\r\n }\r\n }\r\n // Set up cursor\r\n if ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n config.cursor.type = \"XYCursor\";\r\n }\r\n // Set up scrollbars\r\n if ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n config.scrollbarX.type = \"Scrollbar\";\r\n }\r\n if ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n config.scrollbarY.type = \"Scrollbar\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n // Finish up with ranges.\r\n // We need to do this here because series are processed last in JSON\r\n // config. Therefore their respective objects are not yet are available\r\n // when axis (and respectively their ranges) are being processed.\r\n if (yAxes.length) {\r\n for (var i = 0, len = yAxes.length; i < len; i++) {\r\n this.yAxes.getIndex(yAxes[i].index).config = {\r\n axisRanges: yAxes[i].axisRanges\r\n };\r\n }\r\n }\r\n if (xAxes.length) {\r\n for (var i = 0, len = xAxes.length; i < len; i++) {\r\n this.xAxes.getIndex(xAxes[i].index).config = {\r\n axisRanges: xAxes[i].axisRanges\r\n };\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n XYChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"scrollbarX\") {\r\n return 1;\r\n }\r\n else if (b == \"scrollbarX\") {\r\n return -1;\r\n }\r\n else if (a == \"scrollbarY\") {\r\n return 1;\r\n }\r\n else if (b == \"scrollbarY\") {\r\n return -1;\r\n }\r\n else if (a == \"cursor\") {\r\n return 1;\r\n }\r\n else if (b == \"cursor\") {\r\n return -1;\r\n }\r\n else if (a == \"series\") {\r\n return 1;\r\n }\r\n else if (b == \"series\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n /**\r\n * Creates a new Series of type suitable for this chart.\r\n *\r\n * @return New series\r\n */\r\n XYChart.prototype.createSeries = function () {\r\n return new XYSeries();\r\n };\r\n Object.defineProperty(XYChart.prototype, \"zoomOutButton\", {\r\n /**\r\n * @return Zoom out button\r\n */\r\n get: function () {\r\n return this._zoomOutButton;\r\n },\r\n /**\r\n * A [[Button]] element that is used for zooming out the chart.\r\n *\r\n * This button appears only when chart is zoomed in, and disappears\r\n * autoamatically when it is zoome dout.\r\n *\r\n * @param button Zoom out button\r\n */\r\n set: function (button) {\r\n var _this = this;\r\n this._zoomOutButton = button;\r\n if (button) {\r\n button.events.on(\"hit\", function () {\r\n _this.zoomAxes(_this.xAxes, { start: 0, end: 1 });\r\n _this.zoomAxes(_this.yAxes, { start: 0, end: 1 });\r\n }, undefined, false);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all parameters from another [[XYChart]].\r\n *\r\n * @param source Source XYChart\r\n */\r\n XYChart.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n source.xAxes.each(function (axis) {\r\n var a = _this.xAxes.push(axis.clone());\r\n a.chart = _this;\r\n a.renderer.chart = _this;\r\n });\r\n source.yAxes.each(function (axis) {\r\n var a = _this.yAxes.push(axis.clone());\r\n a.renderer.chart = _this;\r\n a.chart = _this;\r\n });\r\n //this.xAxes.copyFrom(source.xAxes);\r\n //this.yAxes.copyFrom(source.yAxes);\r\n _super.prototype.copyFrom.call(this, source);\r\n //this.zoomOutButton.copyFrom(source.zoomOutButton);\r\n if (source.cursor) {\r\n this.cursor = source.cursor.clone();\r\n }\r\n if (source.scrollbarX) {\r\n this.scrollbarX = source.scrollbarX.clone();\r\n }\r\n if (source.scrollbarY) {\r\n this.scrollbarY = source.scrollbarY.clone();\r\n }\r\n //@todo copy all container properties\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n var scrollbarX = this.scrollbarX;\r\n if (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n scrollbarX.scrollbarChart.disposeData();\r\n }\r\n var scrollbarY = this.scrollbarY;\r\n if (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n scrollbarY.scrollbarChart.disposeData();\r\n }\r\n this.xAxes.each(function (axis) {\r\n if (axis instanceof CategoryAxis) {\r\n axis.disposeData();\r\n }\r\n });\r\n this.yAxes.each(function (axis) {\r\n if (axis instanceof CategoryAxis) {\r\n axis.disposeData();\r\n }\r\n });\r\n };\r\n /**\r\n * Adds one or several (array) of data items to the existing data.\r\n *\r\n * @param rawDataItem One or many raw data item objects\r\n */\r\n XYChart.prototype.addData = function (rawDataItem, removeCount) {\r\n if (this.scrollbarX instanceof XYChartScrollbar) {\r\n this.addScrollbarData(this.scrollbarX, removeCount);\r\n }\r\n if (this.scrollbarY instanceof XYChartScrollbar) {\r\n this.addScrollbarData(this.scrollbarY, removeCount);\r\n }\r\n _super.prototype.addData.call(this, rawDataItem, removeCount);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.addScrollbarData = function (scrollbar, removeCount) {\r\n var chart = scrollbar.scrollbarChart;\r\n chart._parseDataFrom = chart.data.length;\r\n chart.invalidateData();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.removeScrollbarData = function (scrollbar, removeCount) {\r\n var chart = scrollbar.scrollbarChart;\r\n if ($type.isNumber(removeCount)) {\r\n while (removeCount > 0) {\r\n var dataItem = this.dataItems.getIndex(0);\r\n if (dataItem) {\r\n chart.dataItems.remove(dataItem);\r\n }\r\n chart.dataUsers.each(function (dataUser) {\r\n var dataItem = dataUser.dataItems.getIndex(0);\r\n if (dataItem) {\r\n dataUser.dataItems.remove(dataItem);\r\n }\r\n });\r\n chart._parseDataFrom--;\r\n removeCount--;\r\n }\r\n chart.invalidateData();\r\n }\r\n };\r\n /**\r\n * Removes elements from the beginning of data\r\n *\r\n * @param count number of elements to remove\r\n */\r\n XYChart.prototype.removeData = function (count) {\r\n if (this.scrollbarX instanceof XYChartScrollbar) {\r\n this.removeScrollbarData(this.scrollbarX, count);\r\n }\r\n if (this.scrollbarY instanceof XYChartScrollbar) {\r\n this.removeScrollbarData(this.scrollbarY, count);\r\n }\r\n _super.prototype.removeData.call(this, count);\r\n };\r\n /**\r\n * @param value Tap to activate?\r\n */\r\n XYChart.prototype.setTapToActivate = function (value) {\r\n _super.prototype.setTapToActivate.call(this, value);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = value;\r\n this.plotContainer.interactions.isTouchProtected = value;\r\n }\r\n };\r\n XYChart.prototype.handleTapToActivate = function () {\r\n _super.prototype.handleTapToActivate.call(this);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = false;\r\n this.plotContainer.interactions.isTouchProtected = false;\r\n }\r\n };\r\n XYChart.prototype.handleTapToActivateDeactivation = function () {\r\n _super.prototype.handleTapToActivateDeactivation.call(this);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = true;\r\n this.plotContainer.interactions.isTouchProtected = true;\r\n }\r\n };\r\n return XYChart;\r\n}(SerialChart));\r\nexport { XYChart };\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[\"XYChart\"] = XYChart;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Remove horizontal scrollbar on narrow charts.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof XYChart && target.scrollbarX) {\r\n var state = target.states.create(stateId);\r\n var sbstate = target.scrollbarX.states.create(stateId);\r\n sbstate.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Remove vertical scrollbar on short charts.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof XYChart && target.scrollbarY) {\r\n var state = target.states.create(stateId);\r\n var sbstate = target.scrollbarY.states.create(stateId);\r\n sbstate.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=XYChart.js.map","/**\r\n * Module for building 3D serial charts.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYChart3DDataItem = /** @class */ (function (_super) {\r\n __extends(XYChart3DDataItem, _super);\r\n function XYChart3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYChart3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return XYChart3DDataItem;\r\n}(XYChartDataItem));\r\nexport { XYChart3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nvar XYChart3D = /** @class */ (function (_super) {\r\n __extends(XYChart3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChart3D() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Type of the axis renderer to use for X axes.\r\n */\r\n _this._axisRendererX = AxisRendererX3D;\r\n /**\r\n * Type of the axis renderer to use for Y axes.\r\n */\r\n _this._axisRendererY = AxisRendererY3D;\r\n _this.className = \"XYChart3D\";\r\n // Set defaults\r\n _this.depth = 30;\r\n _this.angle = 30;\r\n // Creeate container for columns\r\n var columnsContainer = _this.seriesContainer.createChild(Container);\r\n columnsContainer.shouldClone = false;\r\n columnsContainer.isMeasured = false;\r\n columnsContainer.layout = \"none\";\r\n _this.columnsContainer = columnsContainer;\r\n _this.columnsContainer.mask = _this.createChild(Sprite);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * This is done because for some reason IE doesn't change mask if path of a\r\n * mask changes.\r\n */\r\n XYChart3D.prototype.updateSeriesMasks = function () {\r\n _super.prototype.updateSeriesMasks.call(this);\r\n if ($utils.isIE()) {\r\n var columnsContainer = this.columnsContainer;\r\n var mask = columnsContainer.mask;\r\n columnsContainer.mask = undefined;\r\n columnsContainer.mask = mask;\r\n }\r\n };\r\n Object.defineProperty(XYChart3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth of the 3D chart / columns in pixels.\r\n *\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value);\r\n this.fixLayout();\r\n this.invalidateDataUsers();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle the chart is viewed at.\r\n *\r\n * @todo Description (review)\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n this.fixLayout();\r\n this.invalidateDataUsers();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"dx3D\", {\r\n /**\r\n * A calculated horizontal 3D offset (px).\r\n *\r\n * @readonly\r\n * @return Offset (px)\r\n */\r\n get: function () {\r\n return $math.cos(this.angle) * this.depth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"dy3D\", {\r\n /**\r\n * A calculated vertical 3D offset (px).\r\n *\r\n * @readonly\r\n * @return Offset (px)\r\n */\r\n get: function () {\r\n return -$math.sin(this.angle) * this.depth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates layout\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart3D.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.fixColumns();\r\n };\r\n /**\r\n * Updates the layout (padding and scrollbar positions) to accommodate for\r\n * 3D depth and angle.\r\n */\r\n XYChart3D.prototype.fixLayout = function () {\r\n this.chartContainer.paddingTop = -this.dy3D;\r\n this.chartContainer.paddingRight = this.dx3D;\r\n if (this.scrollbarX) {\r\n this.scrollbarX.dy = this.dy3D;\r\n this.scrollbarX.dx = this.dx3D;\r\n }\r\n if (this.scrollbarY) {\r\n this.scrollbarY.dy = this.dy3D;\r\n this.scrollbarY.dx = this.dx3D;\r\n }\r\n this.fixColumns();\r\n _super.prototype.fixLayout.call(this);\r\n };\r\n /**\r\n * Updates column positions, offset and dimensions based on chart's angle\r\n * and depth.\r\n */\r\n XYChart3D.prototype.fixColumns = function () {\r\n var _this = this;\r\n var count = 1;\r\n var i = 0;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series instanceof ColumnSeries3D) {\r\n if (!series.clustered && i > 0) {\r\n count++;\r\n }\r\n series.depthIndex = count - 1;\r\n i++;\r\n }\r\n });\r\n var s = 0;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series instanceof ColumnSeries3D) {\r\n series.depth = _this.depth / (count);\r\n series.angle = _this.angle;\r\n if (series.columnsContainer == _this.columnsContainer) {\r\n series.dx = _this.depth / (count) * $math.cos(_this.angle) * (series.depthIndex);\r\n series.dy = -_this.depth / (count) * $math.sin(_this.angle) * (series.depthIndex);\r\n }\r\n var inversed_1 = false;\r\n if ((series.baseAxis == series.xAxis && series.xAxis.renderer.inversed) || (series.baseAxis == series.yAxis && series.yAxis.renderer.inversed)) {\r\n inversed_1 = true;\r\n }\r\n var i_1 = 1;\r\n series.dataItems.each(function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n if (inversed_1) {\r\n column.zIndex = 1000 * (1000 - i_1) + s - series.depthIndex * 100;\r\n }\r\n else {\r\n column.zIndex = 1000 * i_1 + s - series.depthIndex * 100;\r\n }\r\n }\r\n i_1++;\r\n });\r\n if (inversed_1) {\r\n s--;\r\n }\r\n else {\r\n s++;\r\n }\r\n }\r\n });\r\n this.maskColumns();\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 XYChart3D.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n XYChart3D.prototype.maskColumns = function () {\r\n var w = this.plotContainer.pixelWidth;\r\n var h = this.plotContainer.pixelHeight;\r\n var dx = this.dx3D;\r\n var dy = this.dy3D;\r\n var path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n var columnsContainer = this.columnsContainer;\r\n if (columnsContainer && columnsContainer.mask) {\r\n columnsContainer.mask.path = path;\r\n }\r\n };\r\n return XYChart3D;\r\n}(XYChart));\r\nexport { XYChart3D };\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[\"XYChart3D\"] = XYChart3D;\r\n//# sourceMappingURL=XYChart3D.js.map"],"names":["ChordDiagramDataItem","_super","_this","call","this","className","applyTheme","ChordDiagram","valueAngle","startAngle","endAngle","radius","innerRadius","nodePadding","chordContainer","chartContainer","createChild","align","valign","shouldClone","layout","nodesContainer","parent","linksContainer","events","on","invalidate","prototype","validate","rect","innerRect","x","y","width","height","maxRadius","Math","min","innerWidth","innerHeight","pixelInnerRadius","total","dataItem","values","value","sum","count","newTotal","_sorted","strNode","node","getNodeValue","minNodeSize","slice","arc","adjustedTotal","nonRibbon","trueStartAngle","definedBBox","invalidateLayout","applyInternalDefaults","readerTitle","language","translate","createDataItem","Object","defineProperty","get","getPropertyValue","set","setPropertyValue","enumerable","configurable","setPercentProperty","links","template","middleLine","strokeOpacity","link","fillOpacity","createNode","_disposers","push","createLink","FlowDiagramDataItem","properties","fromName","setProperty","toName","color","setValue","_link","link_1","component","create","addSprite","removeValue","FlowDiagram","colors","sortBy","sequencedInterpolation","step","isMeasured","dispose","validateData","_parseDataFrom","nodes","clear","sortNodes","reset","low","high","dataItems","iterator","getKey","name","chart","fromNode","outgoingDataItems","toNode","incomingDataItems","strokeModifier","opacities","fillModifier","key","setCalculatedValue","fill","undefined","next","visible","hide","feedLegend","handleDataItemWorkingValueChange","sortedIterator","incomingTotal","outgoingTotal","getWorkingValue","totalIncoming","totalOutgoing","changeSorting","_nodes","event","target","handleHit","_links","legend","legendData_1","each","data","dataFields","disposeData","GaugeChart","GaugeChartDataItem","hands","processHand","hand","newValue","axis","xAxes","getIndex","configOrder","a","b","MapChart","MapChartDataItem","scaleRatio","zoomDuration","zoomEasing","minZoomLevel","maxZoomLevel","_prevZoomGeoPoint","latitude","longitude","projection","maxPanOut","homeZoomLevel","zoomStep","centerMapOnZoomOut","padding","backgroundSeries","minWidth","minHeight","once","handleAllInited","seriesContainer","inert","resizable","handleMapTransform","handleDoubleHit","handleDrag","zIndex","dragWhileResize","adapter","add","scale","previousWidth","previousHeight","updateExtremes","updateCenterGeoPoint","inited","_mapAnimation","stop","allInited_1","series","updateTooltipBounds","dataInvalid","updateScaleRatio","zoomToGeoPoint","_zoomGeoPointReal","zoomLevel","chartContainerBg","background","e","dragStart","interactions","downPointers","dragStop","focusable","handleMapDown","addDisposer","inertia","inertias","done","body","ev","topParent","hasFocused","_zoomControl","thumb","isFocused","pan","mouseWheelBehavior","interaction","handlePanDown","handlePanUp","panSprite","C","handlePanMove","interactionsEnabled","opacity","panBehavior","svgPoint","pointer","point","htmlContainer","svgContainer","_downPointOrig","moveTo","_downDeltaLongitude","deltaLongitude","_downDeltaLatitude","deltaLatitude","isResized","areTransformed","d3Projection","rotate","rotation","dln","dlt","dlg","downGeoLocal","invert","local","pixelX","pixelY","geoLocal","goHome","disposer_1","removeDispose","updateZoomGeoPoint","seriesPoint","pixelPaddingLeft","pixelPaddingTop","geoPoint","maxLeft","maxRight","maxTop","maxBottom","features","getFeatures","length","bounds","d3Path","geometry","bbox","group","getBBox","seriesMaxLeft","seriesMaxRight","seriesMaxTop","seriesMaxBottom","seriesWidth","seriesHeight","_centerGeoPoint","d","ww","hh","minX","maxWidth","maxX","max","minY","maxHeight","maxY","zoomGeoPoint","cssScale","svgPointToGeo","zoomIn","handleWheel","shift","mouseOptions","sensitivity","zoomOut","_mouseWheelDisposer","wheelable","draggable","invalidateProjection","_backgroundSeries","validateDataItems","east","north","west","south","ignoreBounds","fitExtent","foundGraticule","concat","w","h","deltaLong","deltaLat","deltaGamma","geoJSON","initialScale","fitSize","invalidateDataUsers","invalidateData","polygon","mapPolygons","multiPolygon","_fitWidth","_fitHeight","hScale","vScale","Infinity","dispatch","seriesPointToGeo","geoPointToSVG","geoPointToSeries","convert","_geodata","geodata","reverseGeodata","processReverseGeodata","dataUsers","dataUser","i","madeFromGeoData","splice","feature","coordinates","type","reverse","center","duration","mapObject","hasData_1","mapPoint","animate","property","to","from","validatePosition","zoomToMapObject","dataItem_1","polygonPoint","zoomToRectangle","level","splitLongitude","newLong","abs","pixelWidth","pixelHeight","_prevZoomLevel","readerAlert","locale","_smallMap","smallMap","zoomControl","plusButton","exportable","minusButton","createSeries","rotateMap","_dataSources","dataSource","getDataSource","loadData","setDataSourceEvents","processConfig","config","name_1","window","JSON","parse","raiseCriticalError","Error","createClassInstance","handleSeriesAdded","asIs","field","homeGeoPoint","centerGeoPoint","setPaper","paper","hideOverflow","hiddenInLegend","interfaceColors","getFor","polygonTemplate","stroke","setLegend","setTapToActivate","isTouchProtected","handleTapToActivate","handleTapToActivateDeactivation","asFunction","hasLicense","match","PercentChartDataItem","PercentChart","legendSettings","labels","text","valueLabels","itemContainers","percentSeriesDataItem","dataContext","isHiding","dispatchImmediately","isHover","isRealHover","PieChartDataItem","PieChart","updateRadius","validateLayout","_chartPixelRadius","updateSeriesAngles","_startAngleInternal","_endAngleInternal","chartCont","chartRadius","chartPixelInnerRadius","seriesRadius","_chartPixelInnerRadius","pixelRadius","bulletsContainer","PieChart3D","PieChart3DDataItem","depth","angle","RadarChartDataItem","RadarChart","_axisRendererX","_axisRendererY","innerRadiusModifyer","mr","radarContainer","plotContainer","axisBulletsContainer","_cursorContainer","_bulletMask","element","processAxis","renderer","gridContainer","breakContainer","toBack","handleXAxisRangeChange","yAxes","handleYAxisRangeChange","cursor","len","beforeDraw","wr","hr","diameter","_pixelInnerRadius","path","useChartAngles","pixelRadiusReal","updateXAxis","processRenderer","updateYAxis","SankeyDiagramDataItem","SankeyDiagram","orientation","nodeAlign","_valueHeight","_levelCount","getNodeLevel","levels","_counter","checkLoop","apply","calculateValueHeight","_levelSum","_levelNodesCount","maxSum","availableHeight","maxSumLevel","realValue","levelNodeCount","valueHeight","_maxSumLevel","maxSumLevelNodeCount","finalHeight","_heightAnimation","animationOptions","err","interpolationDuration","states","transitionDuration","interpolationEasing","start","container","nextCoordinate","delta","levelCoordinate","nodeCount","showReal","preventShow","container_1","i_1","dx","dy","delay","sequencedInterpolationDelay","invalidateLinks","animation","show","isFinished","nodeHeight","nameLabel","label","horizontalCenter","locationX","SerialChartDataItem","SerialChart","_usesData","patterns","_series","handleSeriesRemoved","oldValue","invalidateDataItems","autoDispose","remove","di","isDisposed","_dataUsers","moveValue","handleSeriesAdded2","handleLegendSeriesAdded","addData","showOnInit","reinit","_data","copyFrom","source","appear","SlicedChartDataItem","SlicedChart","TreeMapDataItem","rows","workingValue","x0","y0","x1","y1","hasChildren","children","_legendDataItem","valueLabel","getDuration","child","childValue","index","toValue","fields","setWorkingValue","seriesDataItem","bullets","TreeMap","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","hideParentColumns","sorting","xAxis","title","disabled","strictMinMax","xRenderer","inside","ticks","grid","axisFills","minGridDistance","line","baseGrid","yAxis","yRenderer","inversed","seriesTemplates","virtualParent","zoomOutButton","zoomToChartDataItem","_homeDataItem","isTemplate","_navigationBar","navigationBar","createTreeSeries","_tempSeries","homeDataItem","clone","_homeText","round","getMinMax","layoutItems","sort","_updateDataItemIndexes","navigationData","parentDataItem","initSeries","createTreeSeriesReal","indexOf","setData","currentlyZoomed","end","seriesAppeared","toString","columnsContainer","columns","treeMapDataItem","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","bullet","zoomToValues","rangeChangeAnimation","_dataDisposers","binaryTree","dice","sliceDice","validateRawData","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","sqrt","i0","i1","row","handleDataItemValueChange","getLegendLevel","legendParent","getExporting","exporting","info","format","XYChartDataItem","XYChart","_seriesPoints","maskBullets","arrangeTooltips","topAxesCont","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","rightAxesCont","rightAxesContainer","Number","MAX_SAFE_INTEGER","marginTop","marginRight","dataGrouped","_baseInterval","draw","toFront","mask","updateSeriesLegend","updatePlotElements","dataChangeUpdate","leftAxesWidth","measuredWidth","rightAxesWidth","paddingLeft","paddingRight","appeared","handleXAxisChange","handleYAxisChange","processXAxis","observe","axisLetter","dataProvider","processYAxis","range","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","maxZoomCount","minZoomFactor","maxZoomFactor","scrollbarY","scrollbar","skipRangeEvents","axes","syncWithAxis","axisStart","axisEnd","opposite","updateSeriesMasks","mainContainer","invalidateProcessedData","resetExtremes","_xAxes","handleAxisRemoval","_yAxes","backgroundOpacity","_cursor","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","tapToActivate","xPosition_1","xPosition","yPosition_1","yPosition","showSeriesTooltip","exceptAxes_1","snapToSeries","downPoint","dataItems_1","snpSeries","isHidden","baseAxis","getSeriesDataItem","toAxisPosition","closestDataItem_1","getClosest","closestSeries","hideTooltip","showTooltipAtDataItem","handleSnap","_cursorXPosition","showAxisTooltip","_cursorYPosition","sortSeriesTooltips","afterDraw","closestDataItem","minDistance","xPos","positionToCoordinate","toGlobalPosition","yPos","xField","yField","getValue","dxPosition","getPositionX","locations","dyPosition","getPositionY","distance","pow","hideObjectTooltip","updateLegendValue","sprites","sprite","cursorTooltipEnabled","position","seriesPoints","snapTooltip","showTooltipAtPosition","tooltip","setBounds","cursor_1","maxTooltipDistance","nearestSeries_1","nearestPoint_1","cursorPoint_1","smallestDistance_1","fixedPoint","newSeriesPoints_1","tooltipDataItem","handleOutReal","np","topLeft_1","bottomRight_1","sum_1","filteredSeriesPoints_1","firstSeries","averageY","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","invalid","pixelMarginTop","nextY","measuredHeight","pixelMarginBottom","except","getUpdatedRange","difference","behavior","xRange","priority","yRange","_panStartXRange","_panStartYRange","_panEndXRange","panEndRange","panStartRange","snapOnPan","_panEndYRange","axisRange","newStart","newEnd","newRange","handleYAxisSet","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","updateThumb","arg","getPositionLabel","_scrollbarY","handleYScrollbarChange","fixRange","instantly","declination","realRange","originalRange","minZoomCount","cellWidth","getCellEndPosition","getCellStartPosition","roundPosition","startLocation","endLocation","zoom","plotPoint","handleWheelReal","handleHorizontalWheel","horizontalMouseWheelBehavior","rangeX","rangeY","shiftStep","singleItemStep","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","location2X","locationY","location2Y","hoverable","_mouseWheelDisposer2","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","len_1","date","dateFormatter","endDate","axisRanges","len_2","_zoomOutButton","button","scrollbarChart","rawDataItem","removeCount","addScrollbarData","removeScrollbarData","removeData","relevant","state","stateId","sbstate","XYChart3D","XYChart3DDataItem","fixLayout","fixColumns","paddingTop","dy3D","dx3D","clustered","depthIndex","s","inversed_1","column","maskColumns"],"sourceRoot":""}