{"version":3,"file":"js/chunk-vendors-acdc39d7.c207a6b0.js","mappings":"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","sources":["webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/CandlestickSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/ColumnSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/ColumnSeries3D.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/ConeSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/CurvedColumnSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/FunnelSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/LineSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/LineSeriesSegment.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/OHLCSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/PercentSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/PictorialStackedSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/PieSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/PieSeries3D.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/PyramidSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/RadarColumnSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/RadarSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/Series.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/StepLineSeriesSegment.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/StepLineSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/TreeMapSeries.js","webpack://rokk3rfuel/./node_modules/@amcharts/amcharts4/.internal/charts/series/XYSeries.js"],"sourcesContent":["/**\r\n * Candlestick Series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\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 [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar CandlestickSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(CandlestickSeriesDataItem, _super);\r\n /**\r\n * Defines a type of [[Component]] this data item is used for\r\n * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n */\r\n //public _component!: CandlestickSeries;\r\n /**\r\n * Constructor\r\n */\r\n function CandlestickSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.values.lowValueX = {};\r\n _this.values.lowValueY = {};\r\n _this.values.highValueX = {};\r\n _this.values.highValueY = {};\r\n _this.className = \"CandlestickSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"lowValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.lowValueX.value;\r\n },\r\n /**\r\n * Low value for horizontal axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"lowValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"lowValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.lowValueY.value;\r\n },\r\n /**\r\n * Low value for vertical axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"lowValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"highValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.highValueX.value;\r\n },\r\n /**\r\n * High value for horizontal axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"highValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"highValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.highValueY.value;\r\n },\r\n /**\r\n * High value for vertical axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"highValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"closeValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueX.value;\r\n },\r\n /**\r\n * Close value for horizontal axis.\r\n *\r\n * This is an alias for `valueX` added for convenience only.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"closeValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueY.value;\r\n },\r\n /**\r\n * Close value for vertical axis.\r\n *\r\n * This is an alias for `valueX` added for convenience only.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CandlestickSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { CandlestickSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar CandlestickSeries = /** @class */ (function (_super) {\r\n __extends(CandlestickSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CandlestickSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CandlestickSeries\";\r\n _this.groupFields.lowValueX = \"low\";\r\n _this.groupFields.lowValueY = \"low\";\r\n _this.groupFields.highValueX = \"high\";\r\n _this.groupFields.highValueY = \"high\";\r\n _this.strokeOpacity = 1;\r\n var interfaceColors = new InterfaceColorSet();\r\n var positiveColor = interfaceColors.getFor(\"positive\");\r\n var negativeColor = interfaceColors.getFor(\"negative\");\r\n _this.dropFromOpenState.properties.fill = negativeColor;\r\n _this.dropFromOpenState.properties.stroke = negativeColor;\r\n _this.riseFromOpenState.properties.fill = positiveColor;\r\n _this.riseFromOpenState.properties.stroke = positiveColor;\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 CandlestickSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Candlestick Series\");\r\n }\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 CandlestickSeries.prototype.createDataItem = function () {\r\n return new CandlestickSeriesDataItem();\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n CandlestickSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n this.validateCandlestick(dataItem);\r\n };\r\n CandlestickSeries.prototype.validateCandlestick = function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n var lowLine_1 = column.lowLine;\r\n var highLine_1 = column.highLine;\r\n if (this.baseAxis == this.xAxis) {\r\n var x = column.pixelWidth / 2;\r\n lowLine_1.x = x;\r\n highLine_1.x = x;\r\n var open_1 = dataItem.getWorkingValue(this.yOpenField);\r\n var close_1 = dataItem.getWorkingValue(this.yField);\r\n var yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n var yClose = this.yAxis.getY(dataItem, this.yField);\r\n var yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n var yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n var pixelY = column.pixelY;\r\n lowLine_1.y1 = yLow - pixelY;\r\n highLine_1.y1 = yHigh - pixelY;\r\n if (open_1 < close_1) {\r\n lowLine_1.y2 = yOpen - pixelY;\r\n highLine_1.y2 = yClose - pixelY;\r\n }\r\n else {\r\n lowLine_1.y2 = yClose - pixelY;\r\n highLine_1.y2 = yOpen - pixelY;\r\n }\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n var y = column.pixelHeight / 2;\r\n lowLine_1.y = y;\r\n highLine_1.y = y;\r\n var open_2 = dataItem.getWorkingValue(this.xOpenField);\r\n var close_2 = dataItem.getWorkingValue(this.xField);\r\n var xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n var xClose = this.xAxis.getX(dataItem, this.xField);\r\n var xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n var xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n var pixelX = column.pixelX;\r\n lowLine_1.x1 = xLow - pixelX;\r\n highLine_1.x1 = xHigh - pixelX;\r\n if (open_2 < close_2) {\r\n lowLine_1.x2 = xOpen - pixelX;\r\n highLine_1.x2 = xClose - pixelX;\r\n }\r\n else {\r\n lowLine_1.x2 = xClose - pixelX;\r\n highLine_1.x2 = xOpen - pixelX;\r\n }\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n // LOW LINE\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n var rangeLowLine = rangeColumn.lowLine;\r\n rangeLowLine.x = lowLine_1.x;\r\n rangeLowLine.y = lowLine_1.y;\r\n rangeLowLine.x1 = lowLine_1.x1;\r\n rangeLowLine.x2 = lowLine_1.x2;\r\n rangeLowLine.y1 = lowLine_1.y1;\r\n rangeLowLine.y2 = lowLine_1.y2;\r\n // HIGH LINE\r\n var rangehighLine = rangeColumn.highLine;\r\n rangehighLine.x = highLine_1.x;\r\n rangehighLine.y = highLine_1.y;\r\n rangehighLine.x1 = highLine_1.x1;\r\n rangehighLine.x2 = highLine_1.x2;\r\n rangehighLine.y1 = highLine_1.y1;\r\n rangehighLine.y2 = highLine_1.y2;\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(CandlestickSeries.prototype, \"xLowField\", {\r\n /**\r\n * A data field to look for \"low\" value for horizontal axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._xLowField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"yLowField\", {\r\n /**\r\n * A data field to look for \"low\" value for vertical axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._yLowField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"xHighField\", {\r\n /**\r\n * A data field to look for \"high\" value for horizontal axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._xHighField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"yHighField\", {\r\n /**\r\n * A data field to look for \"high\" value for vertical axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._yHighField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets up which data fields to use for data access.\r\n */\r\n CandlestickSeries.prototype.defineFields = function () {\r\n _super.prototype.defineFields.call(this);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (this.baseAxis == xAxis) {\r\n var yAxisFieldName = $utils.capitalize(yAxis.axisFieldName);\r\n this._yLowField = (\"low\" + yAxisFieldName + \"Y\");\r\n this._yHighField = (\"high\" + yAxisFieldName + \"Y\");\r\n }\r\n if (this.baseAxis == yAxis) {\r\n var xAxisFieldName = $utils.capitalize(xAxis.axisFieldName);\r\n this._xLowField = (\"low\" + xAxisFieldName + \"X\");\r\n this._xHighField = (\"high\" + xAxisFieldName + \"X\");\r\n }\r\n this.addValueField(xAxis, this._xValueFields, this._xLowField);\r\n this.addValueField(xAxis, this._xValueFields, this._xHighField);\r\n this.addValueField(yAxis, this._yValueFields, this._yLowField);\r\n this.addValueField(yAxis, this._yValueFields, this._yHighField);\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n CandlestickSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(Candlestick);\r\n column.shouldClone = false;\r\n column.copyFrom(this.columns.template);\r\n var cw;\r\n var ch;\r\n var highLine = column.lowLine;\r\n var lowLine = column.highLine;\r\n if (this.baseAxis == this.yAxis) {\r\n cw = w / 3;\r\n ch = h;\r\n highLine.y = h / 2;\r\n lowLine.y = h / 2;\r\n highLine.x2 = w / 3;\r\n lowLine.x2 = w / 3;\r\n lowLine.x = w / 3 * 2;\r\n column.column.x = w / 3;\r\n }\r\n else {\r\n cw = w;\r\n ch = h / 3;\r\n highLine.x = w / 2;\r\n lowLine.x = w / 2;\r\n highLine.y2 = h / 3;\r\n lowLine.y2 = h / 3;\r\n lowLine.y = h / 3 * 2;\r\n column.column.y = h / 3;\r\n }\r\n column.width = cw;\r\n column.height = ch;\r\n $object.copyProperties(this, marker, visualProperties);\r\n $object.copyProperties(this.columns.template, column, visualProperties);\r\n column.stroke = this.riseFromOpenState.properties.stroke;\r\n column.fill = column.stroke;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.fill;\r\n legendDataItem.colorOrig = column.fill;\r\n };\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n CandlestickSeries.prototype.createColumnTemplate = function () {\r\n return new Candlestick();\r\n };\r\n return CandlestickSeries;\r\n}(ColumnSeries));\r\nexport { CandlestickSeries };\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[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n//# sourceMappingURL=CandlestickSeries.js.map","/**\r\n * Column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem } from \"./XYSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\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 [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(ColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeriesDataItem\";\r\n _this.locations[\"dateX\"] = 0.5;\r\n _this.locations[\"dateY\"] = 0.5;\r\n _this.locations[\"categoryX\"] = 0.5;\r\n _this.locations[\"categoryY\"] = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"column\", {\r\n /**\r\n * @return Column\r\n */\r\n get: function () {\r\n return this._column;\r\n },\r\n /**\r\n * A column used to draw a column for this data item.\r\n *\r\n * @param column\r\n */\r\n set: function (column) {\r\n this.setColumn(column);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ColumnSeriesDataItem.prototype.setColumn = function (column) {\r\n var _this = this;\r\n if (this._column && column != this._column) {\r\n $array.remove(this.sprites, this._column);\r\n }\r\n this._column = column;\r\n if (column) {\r\n var prevDataItem = column.dataItem;\r\n if (prevDataItem && prevDataItem != this) {\r\n prevDataItem.column = undefined;\r\n }\r\n this.addSprite(column);\r\n this._disposers.push(new Disposer(function () {\r\n // TODO investigate why component is undefined\r\n // https://codepen.io/team/amcharts/pen/dac4be245d658233a6d7e5597df2208b?editors=0010\r\n if (_this.component) {\r\n _this.component.columns.removeValue(column);\r\n }\r\n }));\r\n }\r\n };\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"width\", {\r\n get: function () {\r\n var width = this.properties.width;\r\n if (this._adapterO) {\r\n width = this._adapterO.apply(\"width\", width);\r\n }\r\n return width;\r\n },\r\n set: function (value) {\r\n if (this.properties.width != value) {\r\n this.properties.width = value;\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"height\", {\r\n get: function () {\r\n var height = this.properties.height;\r\n if (this._adapterO) {\r\n height = this._adapterO.apply(\"height\", height);\r\n }\r\n return height;\r\n },\r\n set: function (value) {\r\n if (this.properties.height != value) {\r\n this.properties.height = value;\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"rangesColumns\", {\r\n /**\r\n * A dictionary storing axes ranges columns by axis uid\r\n */\r\n get: function () {\r\n if (!this._rangesColumns) {\r\n this._rangesColumns = new Dictionary();\r\n }\r\n return this._rangesColumns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ColumnSeriesDataItem;\r\n}(XYSeriesDataItem));\r\nexport { ColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a column graph.\r\n *\r\n * @see {@link IColumnSeriesEvents} for a list of available Events\r\n * @see {@link IColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar ColumnSeries = /** @class */ (function (_super) {\r\n __extends(ColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Start location within cell for columns.\r\n */\r\n _this._startLocation = 0;\r\n /**\r\n * End location within cell for columns.\r\n */\r\n _this._endLocation = 1;\r\n _this.className = \"ColumnSeries\";\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.strokeOpacity = 0;\r\n _this.fillOpacity = 1;\r\n _this.clustered = true;\r\n var columnsContainer = _this.mainContainer.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.columns.template.pixelPerfect = false;\r\n _this.tooltipColorSource = _this.columns.template;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeries.prototype, \"columnsContainer\", {\r\n /**\r\n * A container that columns are created in.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n return this._columnsContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\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 ColumnSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Column Series\");\r\n }\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 ColumnSeries.prototype.createDataItem = function () {\r\n return new ColumnSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.validate = function () {\r\n //@todo Check if we can do better than use `instanceof`\r\n // find start/end locations based on clustered/stacked settings\r\n // go through chart series instead of base axis series, because axis series doesn't maintain order\r\n var _this = this;\r\n this.group.node.removeAttribute(\"fill\");\r\n if (this.chart && this.xAxis && this.yAxis) {\r\n var baseAxisSeries = this.chart.series;\r\n var clusterCount_1 = 0;\r\n var index_1 = 0;\r\n var sortedByAxis_1 = [];\r\n $iter.each(baseAxisSeries.iterator(), function (series) {\r\n if (series instanceof ColumnSeries) {\r\n if (_this.baseAxis == series.baseAxis) {\r\n var index_2;\r\n if (_this.baseAxis == _this.xAxis) {\r\n index_2 = _this.chart.yAxes.indexOf(series.yAxis);\r\n }\r\n else {\r\n index_2 = _this.chart.xAxes.indexOf(series.xAxis);\r\n }\r\n sortedByAxis_1.push({ series: series, axis: index_2 });\r\n }\r\n }\r\n });\r\n sortedByAxis_1.sort(function (a, b) { return a.axis - b.axis; });\r\n var prevAxisIndex_1;\r\n $array.each(sortedByAxis_1, function (sortedItem) {\r\n var series = sortedItem.series;\r\n if (series instanceof ColumnSeries) {\r\n if ((!series.stacked && series.clustered) || (prevAxisIndex_1 != sortedItem.axis && series.clustered)) {\r\n clusterCount_1++;\r\n }\r\n if (series == _this) {\r\n index_1 = clusterCount_1 - 1;\r\n }\r\n }\r\n prevAxisIndex_1 = sortedItem.axis;\r\n });\r\n if (!this.clustered) {\r\n index_1 = 0;\r\n clusterCount_1 = 1;\r\n }\r\n var renderer = this.baseAxis.renderer;\r\n var cellStartLocation = renderer.cellStartLocation;\r\n var cellEndLocation = renderer.cellEndLocation;\r\n this._startLocation = cellStartLocation + (index_1 / clusterCount_1) * (cellEndLocation - cellStartLocation);\r\n this._endLocation = cellStartLocation + (index_1 + 1) / clusterCount_1 * (cellEndLocation - cellStartLocation);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis instanceof CategoryAxis && yAxis instanceof ValueAxis) {\r\n if (xAxis.sortBySeries == this) {\r\n this.sortCategoryAxis(xAxis, \"valueY\");\r\n }\r\n }\r\n if (yAxis instanceof CategoryAxis && xAxis instanceof ValueAxis) {\r\n if (yAxis.sortBySeries == this) {\r\n this.sortCategoryAxis(yAxis, \"valueX\");\r\n }\r\n }\r\n }\r\n _super.prototype.validate.call(this);\r\n for (var i = 0; i < this.startIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n for (var i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n this._propertiesChanged = false;\r\n };\r\n ColumnSeries.prototype.sortCategoryAxis = function (axis, key) {\r\n var _this = this;\r\n this.dataItems.values.sort(function (x, y) {\r\n return y.values[key].workingValue - x.values[key].workingValue;\r\n });\r\n var i = 0;\r\n this.dataItems.each(function (dataItem) {\r\n dataItem._index = i;\r\n i++;\r\n });\r\n axis.dataItems.each(function (dataItem) {\r\n var axis = dataItem.component;\r\n var currentPosition = axis.categoryToPosition(dataItem.category) - dataItem.deltaPosition;\r\n var seriesDataItem = axis.getSeriesDataItemByCategory(dataItem.category, _this);\r\n if (seriesDataItem) {\r\n var index = _this.dataItems.indexOf(seriesDataItem);\r\n dataItem._index = index;\r\n var deltaPosition = $math.round((index + 0.5) / _this.dataItems.length - currentPosition, 3);\r\n if (dataItem.deltaAnimation && !dataItem.deltaAnimation.isDisposed() && dataItem.deltaAnimation.animationOptions[0].to == deltaPosition) {\r\n // void\r\n }\r\n else if (deltaPosition != $math.round(dataItem.deltaPosition, 3)) {\r\n if (dataItem.deltaAnimation) {\r\n dataItem.deltaAnimation.stop();\r\n }\r\n dataItem.deltaAnimation = dataItem.animate({ property: \"deltaPosition\", from: -deltaPosition, to: 0 }, axis.interpolationDuration, axis.interpolationEasing);\r\n _this._disposers.push(dataItem.deltaAnimation);\r\n }\r\n }\r\n });\r\n axis.dataItems.values.sort(function (x, y) {\r\n return x.index - y.index;\r\n });\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.validateDataElement = function (dataItem) {\r\n // important oder here, first real, then super. we need this to know size\r\n if (this.chart && this.xAxis && this.yAxis) {\r\n this.validateDataElementReal(dataItem);\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n }\r\n };\r\n /**\r\n * Returns relative start location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n ColumnSeries.prototype.getStartLocation = function (dataItem) {\r\n var startLocation = this._startLocation;\r\n if (this.baseAxis == this.xAxis) {\r\n startLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n }\r\n else {\r\n startLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n }\r\n return startLocation;\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n /*\r\n public handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n if (this.simplifiedProcessing) {\r\n this.validateDataElement(dataItem);\r\n }\r\n else {\r\n super.handleDataItemWorkingValueChange(dataItem, name);\r\n }\r\n }*/\r\n /**\r\n * Returns relative end location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n ColumnSeries.prototype.getEndLocation = function (dataItem) {\r\n var endLocation = this._endLocation;\r\n if (this.baseAxis == this.xAxis) {\r\n endLocation += dataItem.locations[this.xField] - 0.5;\r\n }\r\n else {\r\n endLocation += dataItem.locations[this.yField] - 0.5;\r\n }\r\n return endLocation;\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n var _this = this;\r\n //\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n var l;\r\n var r;\r\n var t;\r\n var b;\r\n var startLocation = this.getStartLocation(dataItem);\r\n var endLocation = this.getEndLocation(dataItem);\r\n var xField = this.xField;\r\n var xOpenField = this.xOpenField;\r\n var yField = this.yField;\r\n var yOpenField = this.yOpenField;\r\n var template = this.columns.template;\r\n var percentWidth = template.percentWidth;\r\n var percentHeight = template.percentHeight;\r\n var pixelWidth = template.pixelWidth;\r\n var pixelHeight = template.pixelHeight;\r\n var maxWidth = template.maxWidth;\r\n var maxHeight = template.maxHeight;\r\n var paddingLeft = template.pixelPaddingLeft;\r\n var paddingRight = template.pixelPaddingRight;\r\n var paddingTop = template.pixelPaddingTop;\r\n var paddingBottom = template.pixelPaddingBottom;\r\n var outOfBounds = false;\r\n var diw = dataItem.width;\r\n if ($type.hasValue(diw)) {\r\n if ($type.isNumber(diw)) {\r\n pixelWidth = diw;\r\n }\r\n if (diw instanceof Percent) {\r\n percentWidth = diw.value * 100;\r\n }\r\n }\r\n var dih = dataItem.height;\r\n if ($type.hasValue(dih)) {\r\n if ($type.isNumber(dih)) {\r\n pixelHeight = dih;\r\n }\r\n if (dih instanceof Percent) {\r\n percentHeight = dih.value * 100;\r\n }\r\n }\r\n // two category axes\r\n if ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n if (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n return;\r\n }\r\n startLocation = 0;\r\n endLocation = 1;\r\n if (!$type.isNaN(percentWidth)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n r = this.xAxis.getX(dataItem, xField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentWidth)) {\r\n var offset = ((r - l) - pixelWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n // in case max width is set in pixels\r\n if (!$type.isNaN(maxWidth) && maxWidth < Math.abs(r - l)) {\r\n var offset = ((r - l) - maxWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n startLocation = 0;\r\n endLocation = 1;\r\n if (!$type.isNaN(percentHeight)) {\r\n var offset = $math.round((1 - percentHeight / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n b = this.yAxis.getY(dataItem, yField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentHeight)) {\r\n var offset = ((b - t) - pixelHeight) / 2;\r\n b += offset;\r\n t -= offset;\r\n }\r\n // in case max width is set in pixels\r\n if (!$type.isNaN(maxHeight) && maxHeight < Math.abs(b - t)) {\r\n var offset = ((b - t) - maxHeight) / 2;\r\n b += offset;\r\n t -= offset;\r\n }\r\n r = this.fixHorizontalCoordinate(r);\r\n l = this.fixHorizontalCoordinate(l);\r\n t = this.fixVerticalCoordinate(t);\r\n b = this.fixVerticalCoordinate(b);\r\n }\r\n else if (this.baseAxis == this.xAxis) {\r\n if (!dataItem.hasValue(this._yValueFields)) {\r\n return;\r\n }\r\n // in case width is set in percent\r\n if (!$type.isNaN(percentWidth)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n r = this.xAxis.getX(dataItem, xField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentWidth)) {\r\n var offset = ((r - l) - pixelWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n // in case width is set in pixels\r\n if (!$type.isNaN(maxWidth) && maxWidth < Math.abs(r - l)) {\r\n var offset = ((r - l) - maxWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n var bottomLocation = dataItem.locations[yOpenField];\r\n var topLocation = dataItem.locations[yField];\r\n // otherwise gantt chart will start items in the middle of a cell\r\n if (this.yAxis instanceof ValueAxis) {\r\n if (this.dataFields[this.yField] != this.dataFields[this.yOpenField]) {\r\n bottomLocation = 0;\r\n topLocation = 0;\r\n }\r\n }\r\n b = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n t = this.yAxis.getY(dataItem, yField, topLocation);\r\n // used to save location for bullets, but it's not a good approach\r\n // dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n var axisLenght = Math.ceil(this.yAxis.axisLength);\r\n if ((t < 0 && b < 0) || (t > axisLenght && b > axisLenght)) {\r\n outOfBounds = true;\r\n }\r\n t = this.fixVerticalCoordinate(t);\r\n b = this.fixVerticalCoordinate(b);\r\n if (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n outOfBounds = true;\r\n }\r\n }\r\n // horizontal bars\r\n else {\r\n if (!dataItem.hasValue(this._xValueFields)) {\r\n return;\r\n }\r\n if (!$type.isNaN(percentHeight)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n b = this.yAxis.getY(dataItem, yField, endLocation);\r\n // in case height is set in pixels\r\n if ($type.isNaN(percentHeight)) {\r\n var offset = ((b - t) - pixelHeight) / 2;\r\n b -= offset;\r\n t += offset;\r\n }\r\n // in case height is set in pixels\r\n if (!$type.isNaN(maxHeight) && maxHeight < Math.abs(b - t)) {\r\n var offset = ((b - t) - maxHeight) / 2;\r\n b -= offset;\r\n t += offset;\r\n }\r\n var rightLocation = dataItem.locations[xField];\r\n var leftLocation = dataItem.locations[xOpenField];\r\n // otherwise gantt chart will start items in the middle of a cell\r\n if (this.xAxis instanceof ValueAxis) {\r\n if (this.dataFields[this.xField] != this.dataFields[this.xOpenField]) {\r\n rightLocation = 0;\r\n leftLocation = 0;\r\n }\r\n }\r\n r = this.xAxis.getX(dataItem, xField, rightLocation);\r\n l = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n // used to save location for bullets, but it's not a good approach\r\n // dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n var axisLenght = Math.ceil(this.xAxis.axisLength);\r\n if ((r < 0 && l < 0) || (r > axisLenght && l > axisLenght)) {\r\n outOfBounds = true;\r\n }\r\n r = this.fixHorizontalCoordinate(r);\r\n l = this.fixHorizontalCoordinate(l);\r\n if (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n outOfBounds = true;\r\n }\r\n }\r\n var w = Math.abs(r - l);\r\n var h = Math.abs(b - t);\r\n var x = Math.min(l, r);\r\n var y = Math.min(t, b);\r\n if (!outOfBounds) {\r\n var column_1;\r\n if (!dataItem.column) {\r\n column_1 = this.columns.create();\r\n //$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n $object.copyProperties(this, column_1, visualProperties); // need this because 3d columns are not in the same container\r\n $object.copyProperties(this.columns.template, column_1, visualProperties); // second time, no force, so that columns.template would override series properties\r\n dataItem.addSprite(column_1);\r\n dataItem.column = column_1;\r\n column_1.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n // accessibility\r\n if (this.itemsFocusable()) {\r\n if (!$type.hasValue(this.role)) {\r\n this.role = \"menu\";\r\n }\r\n if (!$type.hasValue(column_1.role)) {\r\n column_1.role = \"menuitem\";\r\n }\r\n column_1.focusable = true;\r\n }\r\n else {\r\n if (!$type.hasValue(this.role)) {\r\n this.role = \"list\";\r\n }\r\n if (!$type.hasValue(column_1.role)) {\r\n column_1.role = \"listitem\";\r\n }\r\n column_1.focusable = false;\r\n }\r\n if (column_1.focusable) {\r\n column_1.events.on(\"focus\", function (ev) {\r\n column_1.readerTitle = _this.populateString(_this.itemReaderText, dataItem);\r\n }, undefined, false);\r\n column_1.events.on(\"blur\", function (ev) {\r\n column_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n if (column_1.hoverable) {\r\n column_1.events.on(\"over\", function (ev) {\r\n column_1.readerTitle = _this.populateString(_this.itemReaderText, dataItem);\r\n }, undefined, false);\r\n column_1.events.on(\"out\", function (ev) {\r\n column_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n column_1.parent = this.columnsContainer;\r\n column_1.virtualParent = this;\r\n }\r\n else {\r\n column_1 = dataItem.column;\r\n if (this._propertiesChanged) {\r\n $object.copyProperties(this, column_1, visualProperties);\r\n $object.copyProperties(this.columns.template, column_1, visualProperties);\r\n $array.each(visualProperties, function (property) {\r\n column_1[property] = column_1[property];\r\n });\r\n }\r\n }\r\n column_1.width = w;\r\n column_1.height = h;\r\n column_1.x = x;\r\n column_1.y = y;\r\n column_1.realX = l;\r\n column_1.realY = t;\r\n column_1.realWidth = r - l;\r\n column_1.realHeight = b - t;\r\n this.setColumnStates(column_1);\r\n if (column_1.invalid) {\r\n column_1.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n column_1.__disabled = false;\r\n //column.returnAfterTemp();\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (!rangeColumn) {\r\n rangeColumn = _this.columns.create();\r\n //$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n $object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n dataItem.addSprite(rangeColumn);\r\n dataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n rangeColumn.paper = _this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n }\r\n rangeColumn.parent = axisRange.contents;\r\n rangeColumn.width = w;\r\n rangeColumn.height = h;\r\n rangeColumn.x = x;\r\n rangeColumn.y = y;\r\n _this.setColumnStates(rangeColumn);\r\n if (rangeColumn.invalid) {\r\n rangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n rangeColumn.__disabled = false;\r\n //rangeColumn.returnAfterTemp();\r\n });\r\n }\r\n else {\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n dataItem.itemWidth = w;\r\n dataItem.itemHeight = h;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n if (dataItem) {\r\n if (dataItem.column) {\r\n // otherwise might flicker when enabling\r\n dataItem.column.width = 0;\r\n dataItem.column.height = 0;\r\n dataItem.column.__disabled = true;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n // otherwise might flicker when enabling\r\n rangeColumn.width = 0;\r\n rangeColumn.height = 0;\r\n rangeColumn.__disabled = true;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Apply different state/coloring to columns based on the change value.\r\n *\r\n * @param sprite Sprite to apply state to\r\n * @todo Do not apply accessibility to wicks of the candlesticks\r\n */\r\n ColumnSeries.prototype.setColumnStates = function (sprite) {\r\n if (this._dropFromOpenState || this._dropFromPreviousState || this._riseFromOpenState || this._riseFromPreviousState) {\r\n var dataItem = sprite.dataItem;\r\n if (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n var open_1;\r\n var value = void 0;\r\n var change = void 0;\r\n if (this.baseAxis == this.yAxis) {\r\n if (this.xOpenField && this.xField && this.xAxis instanceof ValueAxis) {\r\n open_1 = dataItem.getValue(this.xOpenField);\r\n value = dataItem.getValue(this.xField);\r\n }\r\n change = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n }\r\n else {\r\n if (this.yOpenField && this.yField && this.yAxis instanceof ValueAxis) {\r\n open_1 = dataItem.getValue(this.yOpenField);\r\n value = dataItem.getValue(this.yField);\r\n }\r\n change = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n }\r\n if (value < open_1) {\r\n dataItem.droppedFromOpen = true;\r\n sprite.defaultState.copyFrom(this._dropFromOpenState);\r\n sprite.setState(this._dropFromOpenState, 0);\r\n }\r\n else {\r\n dataItem.droppedFromOpen = false;\r\n sprite.defaultState.copyFrom(this._riseFromOpenState);\r\n sprite.setState(this._riseFromOpenState, 0);\r\n }\r\n if (change < 0) {\r\n dataItem.droppedFromPrevious = true;\r\n sprite.defaultState.copyFrom(this._dropFromPreviousState);\r\n sprite.setState((this._dropFromPreviousState), 0);\r\n }\r\n else {\r\n dataItem.droppedFromPrevious = false;\r\n sprite.defaultState.copyFrom(this._riseFromPreviousState);\r\n sprite.setState((this._riseFromPreviousState), 0);\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(ColumnSeries.prototype, \"columns\", {\r\n /**\r\n * A list of column elements in the series.\r\n *\r\n * @return Columns\r\n */\r\n get: function () {\r\n if (!this._columns) {\r\n this._columns = new ListTemplate(this.createColumnTemplate());\r\n this._disposers.push(new ListDisposer(this._columns));\r\n this._disposers.push(this._columns.template);\r\n }\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a column element to use as a template.\r\n *\r\n * @return Column template\r\n */\r\n ColumnSeries.prototype.createColumnTemplate = function () {\r\n return new Column();\r\n };\r\n Object.defineProperty(ColumnSeries.prototype, \"clustered\", {\r\n /**\r\n * @return Clustered?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"clustered\");\r\n },\r\n /**\r\n * Cluster this series columns?\r\n *\r\n * Setting to `false` will make columns overlap with other series.\r\n *\r\n * @default true\r\n * @param value Clustered?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"clustered\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"dropFromOpenState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._dropFromOpenState) {\r\n this._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n }\r\n return this._dropFromOpenState;\r\n },\r\n /**\r\n * A state to apply to a column when close value is lower than open value.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._dropFromOpenState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"dropFromPreviousState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._dropFromPreviousState) {\r\n this._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n }\r\n return this._dropFromPreviousState;\r\n },\r\n /**\r\n * A state to apply to a column when its value is lower value of a previous\r\n * column.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._dropFromPreviousState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"riseFromOpenState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._riseFromOpenState) {\r\n this._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n }\r\n return this._riseFromOpenState;\r\n },\r\n /**\r\n * A state to apply to a column when close value is same or higher than open\r\n * value.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._riseFromOpenState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"riseFromPreviousState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._riseFromPreviousState) {\r\n this._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n }\r\n return this._riseFromPreviousState;\r\n },\r\n /**\r\n * A state to apply to a column when its value is same or higher than value\r\n * of a previous column.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._riseFromPreviousState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates value of the related legend item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.updateLegendValue = function (dataItem, notRange) {\r\n var _this = this;\r\n _super.prototype.updateLegendValue.call(this, dataItem, notRange);\r\n if (this.legendDataItem) {\r\n var marker = this.legendDataItem.marker;\r\n var fromOpenState_1;\r\n var fromPreviousState_1;\r\n if (dataItem) {\r\n if (dataItem.droppedFromOpen) {\r\n fromOpenState_1 = this._dropFromOpenState;\r\n }\r\n else {\r\n fromOpenState_1 = this._riseFromOpenState;\r\n }\r\n if (dataItem.droppedFromPrevious) {\r\n fromPreviousState_1 = this._dropFromPreviousState;\r\n }\r\n else {\r\n fromPreviousState_1 = this._riseFromPreviousState;\r\n }\r\n }\r\n $iter.each(marker.children.iterator(), function (child) {\r\n if (dataItem) {\r\n child.setState(fromPreviousState_1);\r\n child.setState(fromOpenState_1);\r\n }\r\n else {\r\n // todo: think what to do here, maybe apply above states based on totals?\r\n child.setState(_this._riseFromPreviousState);\r\n child.setState(_this._riseFromOpenState);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n ColumnSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(RoundedRectangle);\r\n column.shouldClone = false;\r\n $object.copyProperties(this, column, visualProperties);\r\n column.copyFrom(this.columns.template);\r\n column.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n column.width = w;\r\n column.height = h;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = this.fill;\r\n legendDataItem.colorOrig = this.fill;\r\n };\r\n /**\r\n * Copies all properties from another instance of [[ColumnSeries]].\r\n *\r\n * @param source Source series\r\n */\r\n ColumnSeries.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.columns.template.copyFrom(source.columns.template);\r\n };\r\n /**\r\n * returns bullet x location\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.getBulletLocationX = function (bullet, field) {\r\n if (this.baseAxis == this.xAxis) {\r\n var bulletLocationX = bullet.locationX;\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0.5;\r\n }\r\n var endLocation = this.getEndLocation(bullet.dataItem);\r\n var startLocation = this.getStartLocation(bullet.dataItem);\r\n return endLocation - (endLocation - startLocation) * bulletLocationX;\r\n }\r\n else {\r\n return _super.prototype.getBulletLocationX.call(this, bullet, field);\r\n }\r\n };\r\n /**\r\n * returns bullet y location\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.getBulletLocationY = function (bullet, field) {\r\n if (this.baseAxis == this.yAxis) {\r\n var bulletLocationY = bullet.locationY;\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0.5;\r\n }\r\n var endLocation = this.getEndLocation(bullet.dataItem);\r\n var startLocation = this.getStartLocation(bullet.dataItem);\r\n return endLocation - (endLocation - startLocation) * bulletLocationY;\r\n }\r\n else {\r\n return _super.prototype.getBulletLocationY.call(this, bullet, field);\r\n }\r\n };\r\n ColumnSeries.prototype.getAdjustedXLocation = function (dataItem, field, bulletLocationX) {\r\n //if (this.baseAxis == this.xAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n if (dataItem) {\r\n bulletLocationX = dataItem.locations[field];\r\n }\r\n else {\r\n bulletLocationX = 0.5;\r\n }\r\n }\r\n return this._endLocation - (this._endLocation - this._startLocation) * (1 - bulletLocationX);\r\n //}\r\n //else {\r\n //\treturn super.getAdjustedXLocation(dataItem, field);\r\n //}\r\n };\r\n ColumnSeries.prototype.getAdjustedYLocation = function (dataItem, field, bulletLocationY) {\r\n //if (this.baseAxis == this.yAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n if (dataItem) {\r\n bulletLocationY = dataItem.locations[field];\r\n }\r\n else {\r\n bulletLocationY = 0.5;\r\n }\r\n }\r\n return this._endLocation - (this._endLocation - this._startLocation) * bulletLocationY;\r\n //}\r\n //else {\r\n //\treturn super.getAdjustedYLocation(dataItem, field);\r\n //}\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.fixVerticalCoordinate = function (coordinate) {\r\n var paddingBottom = this.columns.template.pixelPaddingBottom;\r\n var paddingTop = this.columns.template.pixelPaddingTop;\r\n var minY = -paddingTop;\r\n var maxY = this.yAxis.axisLength + paddingBottom;\r\n return $math.fitToRange(coordinate, minY, maxY);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.fixHorizontalCoordinate = function (coordinate) {\r\n var paddingLeft = this.columns.template.pixelPaddingLeft;\r\n var paddingRight = this.columns.template.pixelPaddingRight;\r\n var minX = -paddingLeft;\r\n var maxX = this.xAxis.axisLength + paddingRight;\r\n return $math.fitToRange(coordinate, minX, maxX);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.columns.clear();\r\n };\r\n return ColumnSeries;\r\n}(XYSeries));\r\nexport { ColumnSeries };\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[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n//# sourceMappingURL=ColumnSeries.js.map","/**\r\n * 3D column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\nvar ColumnSeries3DDataItem = /** @class */ (function (_super) {\r\n __extends(ColumnSeries3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeries3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ColumnSeries3DDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { ColumnSeries3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar ColumnSeries3D = /** @class */ (function (_super) {\r\n __extends(ColumnSeries3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries3D() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeries3D\";\r\n _this.columns.template.column3D.applyOnClones = true;\r\n _this.columns.template.hiddenState.properties.visible = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeries3D.prototype, \"columnsContainer\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n var chart = this.chart;\r\n if (chart && chart.columnsContainer && chart.leftAxesContainer.layout != \"vertical\" && chart.rightAxesContainer.layout != \"vertical\" && chart.bottomAxesContainer.layout != \"horizontal\" && chart.topAxesContainer.layout != \"horizontal\") {\r\n return chart.columnsContainer;\r\n }\r\n else {\r\n return this._columnsContainer;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries3D.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n if (dataItem.column) {\r\n dataItem.column.dx = this.dx;\r\n dataItem.column.dy = this.dy;\r\n dataItem.column.visible = this.visible;\r\n }\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries3D.prototype.validateDataElements = function () {\r\n _super.prototype.validateDataElements.call(this);\r\n if (this.chart) {\r\n this.chart.invalidateLayout();\r\n }\r\n };\r\n /**\r\n * Returns an element to use for 3D bar.\r\n * @ignore\r\n * @return Element.\r\n */\r\n ColumnSeries3D.prototype.createColumnTemplate = function () {\r\n return new Column3D();\r\n };\r\n Object.defineProperty(ColumnSeries3D.prototype, \"depth\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth (height) of the slices in the series in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value, true);\r\n var template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n template.column3D.depth = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries3D.prototype, \"angle\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Angle (0-360)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle of view for the slices in series. (0-360)\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Angle (0-360)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n var template = this.columns.template;\r\n template.column3D.angle = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ColumnSeries3D;\r\n}(ColumnSeries));\r\nexport { ColumnSeries3D };\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[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n//# sourceMappingURL=ColumnSeries3D.js.map","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\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 [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ConeSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(ConeSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ConeSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ConeSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ConeSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { ConeSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar ConeSeries = /** @class */ (function (_super) {\r\n __extends(ConeSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ConeSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ConeSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n ConeSeries.prototype.createColumnTemplate = function () {\r\n return new ConeColumn();\r\n };\r\n /**\r\n * Returns an SVG path to use as series mask.\r\n *\r\n * @return SVG path\r\n */\r\n ConeSeries.prototype.getMaskPath = function () {\r\n var dx = 0;\r\n var dy = 0;\r\n var column = this.columns.getIndex(0);\r\n if (column) {\r\n if (this.baseAxis == this.xAxis) {\r\n dy = column.coneColumn.innerWidth / 2 + 1;\r\n }\r\n else {\r\n dx = column.coneColumn.innerHeight / 2 + 1;\r\n }\r\n return $path.rectToPath({\r\n x: -dx,\r\n y: 0,\r\n width: this.xAxis.axisLength + dx,\r\n height: this.yAxis.axisLength + dy\r\n });\r\n }\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ConeSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n var column = dataItem.column;\r\n if (column) {\r\n var coneColumn = dataItem.column.coneColumn;\r\n coneColumn.fill = dataItem.column.fill;\r\n if (this.baseAxis == this.yAxis) {\r\n coneColumn.orientation = \"horizontal\";\r\n }\r\n else {\r\n coneColumn.orientation = \"vertical\";\r\n }\r\n }\r\n };\r\n return ConeSeries;\r\n}(ColumnSeries));\r\nexport { ConeSeries };\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[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n//# sourceMappingURL=ConeSeries.js.map","/**\r\n * CurvedColumnSeries module.\r\n *\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar CurvedColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(CurvedColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CurvedColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CurvedColumnSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return CurvedColumnSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { CurvedColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar CurvedColumnSeries = /** @class */ (function (_super) {\r\n __extends(CurvedColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CurvedColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CurvedColumnSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns an element to use for the curved column.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Element.\r\n */\r\n CurvedColumnSeries.prototype.createColumnTemplate = function () {\r\n return new CurvedColumn();\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n CurvedColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n var column = dataItem.column;\r\n column = dataItem.column;\r\n if (column) {\r\n var curvedColumn = dataItem.column.curvedColumn;\r\n curvedColumn.fill = dataItem.column.fill;\r\n if (this.baseAxis == this.yAxis) {\r\n column.orientation = \"horizontal\";\r\n }\r\n else {\r\n column.orientation = \"vertical\";\r\n }\r\n }\r\n };\r\n return CurvedColumnSeries;\r\n}(ColumnSeries));\r\nexport { CurvedColumnSeries };\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[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n//# sourceMappingURL=CurvedColumnSeries.js.map","/**\r\n * Defines Funnel Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\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 $array from \"../../core/utils/Array\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { options } from \"../../core/Options\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[FunnelSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar FunnelSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(FunnelSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"FunnelSeriesDataItem\";\r\n // this helps to invalidate series when value is 0 an it is hidden (no other events are triggered then)\r\n _this.events.on(\"visibilitychanged\", function () {\r\n if (_this.component) {\r\n _this.component.invalidateDataItems();\r\n }\r\n }, _this, false);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(FunnelSeriesDataItem.prototype, \"sliceLink\", {\r\n /**\r\n * A [[FunnelSlice]] element, related to this data item ([[FunnelSlice]]).\r\n *\r\n * @readonly\r\n * @return Slice element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._sliceLink) {\r\n var sliceLink_1 = this.component.sliceLinks.create();\r\n this._sliceLink = sliceLink_1;\r\n this._disposers.push(sliceLink_1);\r\n sliceLink_1.parent = this.component.slicesContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.sliceLinks.removeValue(sliceLink_1);\r\n }\r\n }));\r\n this.addSprite(sliceLink_1);\r\n sliceLink_1.visible = this.visible;\r\n }\r\n return this._sliceLink;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunnelSeriesDataItem;\r\n}(PercentSeriesDataItem));\r\nexport { FunnelSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IFunnelSeriesEvents} for a list of available Events\r\n * @see {@link IFunnelSeriesAdapters} 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 FunnelSeries = /** @class */ (function (_super) {\r\n __extends(FunnelSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelSeries() {\r\n var _this = _super.call(this) || this;\r\n _this._nextY = 0;\r\n _this.className = \"FunnelSeries\";\r\n _this.orientation = \"vertical\";\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.slicesContainer.width = percent(100);\r\n _this.slicesContainer.height = percent(100);\r\n _this._disposers.push(_this.slicesContainer.events.on(\"maxsizechanged\", _this.invalidateDataItems, _this, false));\r\n _this.labelsOpposite = true;\r\n _this.labelsContainer.layout = \"absolute\";\r\n _this.bottomRatio = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates a [[FunnelSlice]] element.\r\n *\r\n * @return Slice\r\n */\r\n FunnelSeries.prototype.createSlice = function () {\r\n return new FunnelSlice();\r\n };\r\n /**\r\n * Creates a [[FunnelTick]] element.\r\n *\r\n * @return Tick\r\n */\r\n FunnelSeries.prototype.createTick = function () {\r\n return new FunnelTick();\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 FunnelSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Funnel Series\");\r\n }\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 FunnelSeries.prototype.createDataItem = function () {\r\n return new FunnelSeriesDataItem();\r\n };\r\n /**\r\n * Inits FunnelSlice.\r\n *\r\n * @param slice to init\r\n */\r\n FunnelSeries.prototype.initSlice = function (slice) {\r\n slice.isMeasured = false;\r\n slice.defaultState.properties.scale = 1;\r\n slice.observe(\"scale\", this.handleSliceScale, this);\r\n slice.observe([\"dx\", \"dy\", \"x\", \"y\"], this.handleSliceMove, this);\r\n slice.tooltipText = \"{category}: {value.percent.formatNumber('#.#p')} ({value.value})\";\r\n var hoverState = slice.states.create(\"hover\");\r\n hoverState.properties.expandDistance = 0.2;\r\n };\r\n /**\r\n * [initLabel description]\r\n *\r\n * @todo Description\r\n * @param label [description]\r\n */\r\n FunnelSeries.prototype.initLabel = function (label) {\r\n _super.prototype.initLabel.call(this, label);\r\n label.verticalCenter = \"middle\";\r\n label.horizontalCenter = \"middle\";\r\n label.isMeasured = true;\r\n label.padding(5, 5, 5, 5);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FunnelSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this._nextY = 0;\r\n };\r\n /**\r\n * [validateDataElements description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n FunnelSeries.prototype.validateDataElements = function () {\r\n var _this = this;\r\n var slicesContainer = this.slicesContainer;\r\n var labelsContainer = this.labelsContainer;\r\n var labelTemplate = this.labels.template;\r\n if (this.alignLabels) {\r\n labelTemplate.interactionsEnabled = true;\r\n slicesContainer.isMeasured = true;\r\n labelsContainer.isMeasured = true;\r\n }\r\n else {\r\n labelTemplate.interactionsEnabled = false;\r\n slicesContainer.isMeasured = false;\r\n labelsContainer.isMeasured = false;\r\n }\r\n var total = 0;\r\n var count = 0;\r\n this.dataItems.each(function (dItem) {\r\n if ($type.hasValue(dItem.value)) {\r\n count++;\r\n if (dItem.value > 0) {\r\n total += Math.abs(dItem.getWorkingValue(\"value\") / dItem.value);\r\n }\r\n else {\r\n if (_this.ignoreZeroValues) {\r\n count--;\r\n }\r\n else {\r\n if (!dItem.visible || dItem.__disabled || dItem.isHiding) {\r\n count--;\r\n }\r\n else {\r\n total += 1;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n this._total = 1 / count * total;\r\n this._count = count;\r\n _super.prototype.validateDataElements.call(this);\r\n this.arrangeLabels();\r\n };\r\n /**\r\n * [getNextValue description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @return [description]\r\n */\r\n FunnelSeries.prototype.getNextValue = function (dataItem) {\r\n var index = dataItem.index;\r\n var nextValue = dataItem.getWorkingValue(\"value\");\r\n if (index < this.dataItems.length - 1) {\r\n var nextItem = this.dataItems.getIndex(index + 1);\r\n nextValue = nextItem.getWorkingValue(\"value\");\r\n if (!nextItem.visible || nextItem.isHiding || nextItem.__disabled || (nextItem.value == 0 && this.ignoreZeroValues)) {\r\n return this.getNextValue(nextItem);\r\n }\r\n }\r\n return nextValue;\r\n };\r\n /**\r\n * [formDataElement description]\r\n *\r\n * @todo Description\r\n */\r\n FunnelSeries.prototype.formDataElement = function () {\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n FunnelSeries.prototype.validateDataElement = function (dataItem) {\r\n var _this = this;\r\n //if ($type.hasValue(dataItem.value)) {\r\n // FunnelSlice\r\n var slice = dataItem.slice;\r\n slice.orientation = this.orientation;\r\n var sliceLink = dataItem.sliceLink;\r\n sliceLink.orientation = this.orientation;\r\n var tick = dataItem.tick;\r\n var label = dataItem.label;\r\n tick.slice = slice;\r\n tick.label = label;\r\n if ($type.hasValue(dataItem.value)) {\r\n this.decorateSlice(dataItem);\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (dataItem.value == 0 && _this.ignoreZeroValues) {\r\n sprite.__disabled = true;\r\n }\r\n else {\r\n sprite.__disabled = false;\r\n }\r\n });\r\n }\r\n else {\r\n $array.each(dataItem.sprites, function (sprite) {\r\n sprite.__disabled = true;\r\n });\r\n }\r\n if (dataItem.index == this.dataItems.length - 1) {\r\n sliceLink.disabled = true;\r\n }\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n sliceLink.fill = slice.fill;\r\n //}\r\n };\r\n /**\r\n * [decorateSlice description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n FunnelSeries.prototype.decorateSlice = function (dataItem) {\r\n var slice = dataItem.slice;\r\n var sliceLink = dataItem.sliceLink;\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n var nextValue = this.getNextValue(dataItem);\r\n var workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n var bottomRatio = this.bottomRatio;\r\n var d = 1;\r\n if (dataItem.value != 0) {\r\n d = workingValue / Math.abs(dataItem.value);\r\n }\r\n else {\r\n if (dataItem.__disabled || dataItem.isHiding || !dataItem.visible) {\r\n d = 0.000001;\r\n }\r\n }\r\n if (this.ignoreZeroValues && dataItem.value == 0) {\r\n dataItem.__disabled = true;\r\n return;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n if (this._nextY == Infinity) {\r\n this._nextY = 0;\r\n }\r\n if (this.orientation == \"vertical\") {\r\n var linkHeight = sliceLink.pixelHeight * d;\r\n maxHeight = maxHeight + linkHeight; // to avoid one link gap in the bottom\r\n slice.topWidth = workingValue / this.dataItem.values.value.high * maxWidth;\r\n slice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxWidth;\r\n slice.y = this._nextY;\r\n slice.height = Math.min(100000, $math.max(0, maxHeight / this._count * d / this._total - linkHeight));\r\n slice.x = maxWidth / 2;\r\n if (!this.alignLabels) {\r\n label.x = slice.x;\r\n }\r\n else {\r\n label.x = undefined;\r\n }\r\n label.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n this._nextY += slice.pixelHeight + linkHeight;\r\n sliceLink.y = this._nextY - linkHeight;\r\n sliceLink.x = slice.x;\r\n }\r\n else {\r\n var linkWidth = sliceLink.pixelWidth * d;\r\n maxWidth = maxWidth + linkWidth; // to avoid one link gap in the bottom\r\n slice.topWidth = workingValue / this.dataItem.values.value.high * maxHeight;\r\n slice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxHeight;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxHeight;\r\n slice.x = this._nextY;\r\n slice.width = Math.min(100000, maxWidth / this._count * d * 1 / this._total - linkWidth);\r\n slice.y = maxHeight / 2;\r\n if (!this.alignLabels) {\r\n label.y = slice.y;\r\n }\r\n else {\r\n label.y = this.labelsContainer.measuredHeight;\r\n }\r\n label.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n this._nextY += slice.pixelWidth + linkWidth;\r\n sliceLink.x = this._nextY - linkWidth;\r\n sliceLink.y = slice.y;\r\n }\r\n };\r\n FunnelSeries.prototype.getLastLabel = function (index) {\r\n if (index > 0) {\r\n var lastLabel = this.labels.getIndex(index);\r\n if (lastLabel.__disabled || !lastLabel.visible) {\r\n return this.getLastLabel(index - 1);\r\n }\r\n else {\r\n return lastLabel;\r\n }\r\n }\r\n };\r\n /**\r\n * [arrangeLabels description]\r\n *\r\n * @todo Description\r\n */\r\n FunnelSeries.prototype.arrangeLabels = function () {\r\n if (this.alignLabels) {\r\n var count = this.labels.length;\r\n if (count > 1) {\r\n var lastLabel = this.getLastLabel(count - 1);\r\n if (lastLabel) {\r\n var lastY = lastLabel.pixelY;\r\n var lastX = lastLabel.pixelX;\r\n if (count > 1) {\r\n for (var i = count - 2; i >= 0; i--) {\r\n var label = this.labels.getIndex(i);\r\n if (label.visible && !label.__disabled) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n if (this.orientation == \"vertical\") {\r\n if (label.pixelY + label.measuredHeight > lastY) {\r\n label.y = Math.min(1000000, lastY - label.measuredHeight);\r\n }\r\n }\r\n // horizontal\r\n else {\r\n if (label.pixelX + label.measuredWidth > lastX) {\r\n label.x = Math.min(1000000, lastX - label.measuredWidth);\r\n }\r\n }\r\n lastY = label.pixelY;\r\n lastX = label.pixelX;\r\n }\r\n }\r\n lastY = 0;\r\n lastX = 0;\r\n for (var i = 0; i < count; i++) {\r\n var label = this.labels.getIndex(i);\r\n if (label.visible && !label.__disabled) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n if (this.orientation == \"vertical\") {\r\n if (label.pixelY < lastY) {\r\n label.y = Math.min(1000000, lastY);\r\n }\r\n }\r\n // horizontal\r\n else {\r\n if (label.pixelX < lastX) {\r\n label.x = Math.min(1000000, lastX);\r\n }\r\n }\r\n lastY += label.measuredHeight;\r\n lastX += label.measuredWidth;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n FunnelSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n var locationX = bullet.locationX;\r\n if (!$type.isNumber(locationX)) {\r\n locationX = 0.5;\r\n }\r\n var locationY = bullet.locationY;\r\n if (!$type.isNumber(locationY)) {\r\n locationY = 1;\r\n }\r\n bullet.x = slice.pixelX + slice.measuredWidth * locationX;\r\n bullet.y = slice.pixelY + slice.measuredHeight * locationY;\r\n };\r\n Object.defineProperty(FunnelSeries.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 funnel slices: \"horizontal\" or \"vertical\" (default).\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"orientation\", value)) {\r\n this.labelsOpposite = this.labelsOpposite;\r\n this.invalidate();\r\n if (value == \"vertical\") {\r\n this.ticks.template.locationX = 1;\r\n this.ticks.template.locationY = 0.5;\r\n this.labels.template.rotation = 0;\r\n this.layout = \"horizontal\";\r\n }\r\n else {\r\n this.ticks.template.locationX = 0.5;\r\n this.ticks.template.locationY = 1;\r\n this.labels.template.rotation = -90;\r\n this.layout = \"vertical\";\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSeries.prototype, \"bottomRatio\", {\r\n /**\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomRatio\");\r\n },\r\n /**\r\n * Indicates how slice's bottom will change in relation to slices top AND\r\n * next slices top.\r\n *\r\n * Basically it's a relative value (0-1) that indicates bottom width\r\n * position between current slice's top width and the top withd of the next\r\n * one.\r\n *\r\n * The scale goes from 0 (closer to current slice width) to 1 (closer to next\r\n * slice with).\r\n *\r\n * `0` (default) will mean that bottom will be the same as top, resulting in\r\n * a prefectly square slice.\r\n *\r\n * From the data-viz standpoint `0` is a correct setting, since area of the\r\n * slices will depict their value correctly.\r\n *\r\n * `1` will mean that slice will become trapezoid with its bottom matching\r\n * width of the next slice.\r\n *\r\n * `0.5` will make bottom width be in the middle of width of current slice\r\n * and the next slice.\r\n *\r\n * @default 0\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"bottomRatio\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSeries.prototype, \"sliceLinks\", {\r\n /**\r\n * A list of elements linking each actual slice.\r\n *\r\n * Please note that links are [[FunnelSlice]] objects, just like real links,\r\n * so they have all the same configuration options.\r\n *\r\n * You can use `template` of this link, to specify how links will look.\r\n *\r\n * ```TypeScript\r\n * series.sliceLinks.template.fillOpacity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * series.sliceLinks.template.fillOpacity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"FunnelSeries\",\r\n * // ...\r\n * \"sliceLinks\": {\r\n * \"fillOpacity\": 0.5\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Funnel links\r\n */\r\n get: function () {\r\n if (!this._sliceLinks) {\r\n var sliceLink = new FunnelSlice();\r\n sliceLink.applyOnClones = true;\r\n sliceLink.fillOpacity = 0.5;\r\n sliceLink.expandDistance = -0.3;\r\n sliceLink.hiddenState.properties.opacity = 0;\r\n this._disposers.push(sliceLink);\r\n this._sliceLinks = new ListTemplate(sliceLink);\r\n this._disposers.push(new ListDisposer(this._sliceLinks));\r\n }\r\n return this._sliceLinks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Duration of reveal animation (ms)\r\n * @return Animation\r\n */\r\n FunnelSeries.prototype.show = function (duration) {\r\n var _this = this;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var delay = 0;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n dataItem.show(interpolationDuration, delay, [\"value\"]);\r\n });\r\n var animation = _super.prototype.show.call(this, duration);\r\n return animation;\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of hiding animation (ms)\r\n * @return Animation\r\n */\r\n FunnelSeries.prototype.hide = function (duration) {\r\n var _this = this;\r\n var fields = [\"value\"];\r\n var value = 0;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var delay = 0;\r\n var interpolationDuration = this.hiddenState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n dataItem.hide(interpolationDuration, delay, value, fields);\r\n });\r\n var animation = _super.prototype.hide.call(this, duration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n return animation;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n FunnelSeries.prototype.setAlignLabels = function (value) {\r\n _super.prototype.setAlignLabels.call(this, value);\r\n this.ticks.template.disabled = !value;\r\n var labelsContainer = this.labelsContainer;\r\n if (labelsContainer) {\r\n // do not align\r\n if (!value) {\r\n labelsContainer.width = percent(100);\r\n labelsContainer.height = percent(100);\r\n }\r\n //align\r\n else {\r\n labelsContainer.height = undefined;\r\n labelsContainer.width = undefined;\r\n labelsContainer.margin(10, 10, 10, 10);\r\n }\r\n }\r\n this.labelsOpposite = this.labelsOpposite;\r\n };\r\n Object.defineProperty(FunnelSeries.prototype, \"labelsOpposite\", {\r\n /**\r\n * @return Labels on opposite side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"labelsOpposite\");\r\n },\r\n /**\r\n * Put labels on the oppsite side of the series?\r\n *\r\n * This setting is only used if `alignLabels = true`.\r\n *\r\n * If set to `true` (default) labels will be drawn to the right (on vertical\r\n * series), or to the bottom (on horizontal series).\r\n *\r\n * If set to `false`, labels will be positioned to the left or top\r\n * respectively.\r\n *\r\n * @default true\r\n * @since 4.1.13\r\n * @param value Labels on opposite side?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"labelsOpposite\", value);\r\n var labelTemplate = this.labels.template;\r\n var labelAlign = \"none\";\r\n var labelValign = \"none\";\r\n if (!this.alignLabels) {\r\n if (this.orientation == \"vertical\") {\r\n labelAlign = \"center\";\r\n }\r\n else {\r\n labelValign = \"middle\";\r\n }\r\n }\r\n else {\r\n // opposite (left/bottom)\r\n if (value) {\r\n this.labelsContainer.toFront();\r\n // left\r\n if (this.orientation == \"vertical\") {\r\n this.ticks.template.locationX = 1;\r\n labelTemplate.horizontalCenter = \"left\";\r\n labelAlign = \"right\";\r\n }\r\n // bottom\r\n else {\r\n this.ticks.template.locationY = 1;\r\n labelTemplate.horizontalCenter = \"right\";\r\n labelValign = \"bottom\";\r\n }\r\n }\r\n // non oposite (right/top)\r\n else {\r\n this.labelsContainer.toBack();\r\n // right\r\n if (this.orientation == \"vertical\") {\r\n this.ticks.template.locationX = 0;\r\n labelAlign = \"left\";\r\n }\r\n // top\r\n else {\r\n labelValign = \"top\";\r\n this.ticks.template.locationY = 0;\r\n }\r\n }\r\n }\r\n labelTemplate.align = labelAlign;\r\n labelTemplate.valign = labelValign;\r\n this.validateLayout();\r\n this.ticks.each(function (tick) {\r\n tick.invalidate();\r\n });\r\n this.invalidateDataItems();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunnelSeries;\r\n}(PercentSeries));\r\nexport { FunnelSeries };\r\n/**\r\n * bboxter 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[\"FunnelSeries\"] = FunnelSeries;\r\nregistry.registeredClasses[\"FunnelSeriesDataItem\"] = FunnelSeriesDataItem;\r\n//# sourceMappingURL=FunnelSeries.js.map","/**\r\n * Line series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem } from \"./XYSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { DurationAxis } from \"../axes/DurationAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar LineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(LineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"LineSeriesDataItem\";\r\n return _this;\r\n }\r\n return LineSeriesDataItem;\r\n}(XYSeriesDataItem));\r\nexport { LineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar LineSeries = /** @class */ (function (_super) {\r\n __extends(LineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Minimum distance in pixels between two adjacent points.\r\n *\r\n * If the distance is less than this setting, a point is skipped.\r\n *\r\n * This allows acceptable performance with huge amounts of data points.\r\n *\r\n * @default 0.5\r\n */\r\n _this.minDistance = 0.5;\r\n _this.segments = new ListTemplate(_this.createSegment());\r\n _this.segments.template.applyOnClones = true;\r\n _this._disposers.push(new ListDisposer(_this.segments));\r\n _this._disposers.push(_this.segments.template);\r\n _this._segmentsIterator = new $iter.ListIterator(_this.segments, function () { return _this.segments.create(); });\r\n _this._segmentsIterator.createNewItems = true;\r\n _this.className = \"LineSeries\";\r\n _this.strokeOpacity = 1;\r\n _this.fillOpacity = 0;\r\n _this.connect = true;\r\n _this.tensionX = 1;\r\n _this.tensionY = 1;\r\n _this.autoGapCount = 1.1;\r\n _this.smoothing = \"bezier\";\r\n _this.segmentsContainer = _this.mainContainer.createChild(Container);\r\n _this.segmentsContainer.isMeasured = false;\r\n // line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n // todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n // this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n _this.bulletsContainer.toFront();\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 LineSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Line Series\");\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.createSegment = function () {\r\n return new LineSeriesSegment();\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 LineSeries.prototype.createDataItem = function () {\r\n return new LineSeriesDataItem();\r\n };\r\n /**\r\n * Inits data item's working values.\r\n *\r\n * @param dataItem Data item\r\n * @param index Data item's index\r\n */\r\n LineSeries.prototype.setInitialWorkingValues = function (dataItem) {\r\n // this makes data items animate when added\r\n var yAxis = this._yAxis.get();\r\n var xAxis = this._xAxis.get();\r\n if (this.appeared && this.visible) {\r\n var previousDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n dataItem.component = this; // as these values are set before, we don't know component yet\r\n if (this.baseAxis == xAxis) {\r\n if (yAxis instanceof ValueAxis) {\r\n var initialY = yAxis.minZoomed;\r\n if (previousDataItem) {\r\n initialY = previousDataItem.values[\"valueY\"].workingValue;\r\n }\r\n // this makes line animate from previous point to newly added point\r\n dataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n dataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n if (xAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX); // animate to it's location\r\n }\r\n else if (xAxis instanceof DurationAxis) {\r\n if (previousDataItem) {\r\n var value = dataItem.valueX;\r\n dataItem.setWorkingValue(\"valueX\", previousDataItem.valueX, 0); // instantly move it to previous\r\n dataItem.setWorkingValue(\"valueX\", value); // animate to new value\r\n }\r\n }\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (xAxis instanceof ValueAxis) {\r\n var initialX = xAxis.minZoomed;\r\n if (previousDataItem) {\r\n initialX = previousDataItem.values[\"valueX\"].workingValue;\r\n }\r\n dataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n dataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n if (yAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY); // animate to it's location\r\n }\r\n else if (yAxis instanceof DurationAxis) {\r\n if (previousDataItem) {\r\n var value = dataItem.valueY;\r\n dataItem.setWorkingValue(\"valueY\", previousDataItem.valueY, 0); // instantly move it to previous\r\n dataItem.setWorkingValue(\"valueY\", value); // animate to new value\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (this.baseAxis == xAxis) {\r\n if (yAxis instanceof ValueAxis) {\r\n if (xAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX);\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n dataItem.setWorkingLocation(\"categoryX\", dataItem.locations.categoryX);\r\n }\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (xAxis instanceof ValueAxis) {\r\n if (yAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY);\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n dataItem.setWorkingLocation(\"categoryY\", dataItem.locations.categoryY);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n LineSeries.prototype.updateLegendValue = function (dataItem, notRange) {\r\n _super.prototype.updateLegendValue.call(this, dataItem, notRange);\r\n //This is hack to save some methos, used to set tooltip color source only\r\n if (dataItem && dataItem.segment) {\r\n this.tooltipColorSource = dataItem.segment;\r\n }\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n LineSeries.prototype.validate = function () {\r\n var _this = this;\r\n _super.prototype.validate.call(this);\r\n if (this.xAxis && this.yAxis) {\r\n this._segmentsIterator.reset();\r\n this.openSegmentWrapper(this._adjustedStartIndex);\r\n $iter.each(this.axisRanges.iterator(), function (range) {\r\n _this.openSegmentWrapper(_this._adjustedStartIndex, range);\r\n });\r\n $iter.each(this._segmentsIterator.iterator(), function (segment) {\r\n segment.__disabled = true;\r\n });\r\n }\r\n };\r\n /**\r\n * [sliceData description]\r\n *\r\n * @todo Description\r\n */\r\n LineSeries.prototype.sliceData = function () {\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n // we need extra one item to both sides with values for line series, otherwise the line will not continue out of bounds of the chart while scrolling\r\n // find first to the left\r\n // TODO use iterator instead\r\n for (var i = this.startIndex - 1; i >= 0; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n startIndex = i;\r\n break;\r\n }\r\n }\r\n this._adjustedStartIndex = this.findAdjustedIndex(startIndex, [\"stroke\", \"strokeWidth\", \"strokeDasharray\", \"strokeOpacity\", \"fill\", \"fillOpacity\", \"opacity\"]);\r\n // find first to the right\r\n // TODO use iterator instead\r\n for (var i = this.endIndex, len = this.dataItems.length; i < len; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n this._workingStartIndex = startIndex;\r\n this._workingEndIndex = endIndex;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.findAdjustedIndex = function (adjustedIndex, properties) {\r\n var _this = this;\r\n var propertyFields = this.propertyFields;\r\n var startIndex = adjustedIndex;\r\n $array.each(properties, function (property) {\r\n if ($type.hasValue(propertyFields[property])) {\r\n for (var i = startIndex; i >= 0; i--) {\r\n var dataItem = _this.dataItems.getIndex(i);\r\n if (dataItem) {\r\n if ($type.hasValue(dataItem.properties[property])) {\r\n if (adjustedIndex > i) {\r\n adjustedIndex = i;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return adjustedIndex;\r\n };\r\n /**\r\n * Wraps openSegment call with iterative solution to prevent stack overflow\r\n *\r\n * @param openIndex Index\r\n * @param axisRange Range\r\n */\r\n LineSeries.prototype.openSegmentWrapper = function (openIndex, axisRange) {\r\n var params = {\r\n \"index\": openIndex,\r\n \"axisRange\": axisRange\r\n };\r\n do {\r\n params = this.openSegment(params.index, params.axisRange);\r\n } while (params);\r\n };\r\n LineSeries.prototype.getSegment = function () {\r\n var segment = this._segmentsIterator.getFirst();\r\n segment.series = this;\r\n if (segment.isDisposed()) {\r\n this.segments.removeValue(segment);\r\n return this.getSegment();\r\n }\r\n return segment;\r\n };\r\n /**\r\n * [openSegment description]\r\n *\r\n * @todo Description\r\n * @param openIndex [description]\r\n * @param axisRange [description]\r\n */\r\n LineSeries.prototype.openSegment = function (openIndex, axisRange) {\r\n var addToClose = false;\r\n var points = [];\r\n openIndex = Math.min(openIndex, this.dataItems.length);\r\n var endIndex = Math.min(this._workingEndIndex, this.dataItems.length);\r\n this._workingEndIndex = Math.min(this._workingEndIndex, this.dataItems.length);\r\n var closeIndex;\r\n var propertiesChanged = false;\r\n var segment = this.getSegment();\r\n segment.strokeDasharray = undefined;\r\n segment.__disabled = false;\r\n if (axisRange) {\r\n segment.parent = axisRange.contents;\r\n $object.copyProperties(axisRange.contents, segment, visualProperties);\r\n }\r\n else {\r\n $object.copyProperties(this, segment, visualProperties);\r\n segment.filters.clear();\r\n segment.parent = this.segmentsContainer;\r\n }\r\n this.group.node.removeAttribute(\"fill\");\r\n var connect = this.connect;\r\n var valuesFound = false; // some flag to avoid multiple closes if no values found\r\n for (var i = openIndex; i < endIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n dataItem.segment = segment;\r\n if (dataItem.hasProperties) {\r\n // if this is first item of segment\r\n if (i == openIndex) {\r\n this.updateSegmentProperties(dataItem.properties, segment);\r\n }\r\n else {\r\n // this time we only need to know if properties changed, so we don't pass segment\r\n propertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n }\r\n }\r\n if (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n this.addPoints(points, dataItem, this.xField, this.yField);\r\n valuesFound = true;\r\n }\r\n else {\r\n // if no values in first data item, go to next\r\n if (i == openIndex) {\r\n continue;\r\n }\r\n else {\r\n // stop cycle\r\n if (!connect && valuesFound) {\r\n closeIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n closeIndex = i;\r\n if (this.baseAxis instanceof DateAxis) {\r\n var next = this.dataItems.getIndex(i + 1);\r\n if (next && this.baseAxis.makeGap(next, dataItem)) {\r\n addToClose = true;\r\n break;\r\n }\r\n }\r\n if (propertiesChanged) {\r\n break;\r\n }\r\n }\r\n return this.closeSegment(segment, points, openIndex, closeIndex, axisRange, addToClose);\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n LineSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n if (!backwards) {\r\n dataItem.point = point;\r\n }\r\n points.push(point);\r\n };\r\n /**\r\n * [closeSegment description]\r\n *\r\n * @todo Description\r\n * @param segment [description]\r\n * @param points [description]\r\n * @param openIndex [description]\r\n * @param closeIndex [description]\r\n * @param axisRange [description]\r\n */\r\n LineSeries.prototype.closeSegment = function (segment, points, openIndex, closeIndex, axisRange, add) {\r\n var closePoints = [];\r\n if (this.dataFields[this._xOpenField] ||\r\n this.dataFields[this._yOpenField] ||\r\n this.stacked) {\r\n for (var i = closeIndex; i >= openIndex; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n this.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n }\r\n }\r\n }\r\n else {\r\n var baseAxis = this.baseAxis;\r\n var count = points.length;\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (count > 0) {\r\n if (baseAxis == xAxis) {\r\n closePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n closePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n }\r\n else {\r\n closePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n closePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n }\r\n }\r\n }\r\n this.drawSegment(segment, points, closePoints);\r\n if (add) {\r\n closeIndex++;\r\n }\r\n if (closeIndex < this._workingEndIndex - 1) {\r\n return { \"index\": closeIndex, \"axisRange\": axisRange };\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n /**\r\n * Draws the line segment.\r\n *\r\n * @param segment Segment\r\n * @param points Segment points\r\n * @param closePoints Segment close points\r\n */\r\n LineSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n segment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n };\r\n /**\r\n * Segement will get its colors from `this.dataItem`, as thats how\r\n * `getPropertyValue()` method works.\r\n *\r\n * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n * `hasProperties` is set to `true` on data item (this means it can contain\r\n * some properties set).\r\n *\r\n * @param itemProperties Item properties\r\n * @param segment Segment\r\n * @return Properties changed?\r\n */\r\n LineSeries.prototype.updateSegmentProperties = function (itemProperties, segment, checkOnly) {\r\n var changed = false;\r\n $object.each(itemProperties, function (propertyName, value) {\r\n // some value must be defined\r\n if ($type.hasValue(value)) {\r\n var currentValue = segment[propertyName];\r\n var currentValueStr = void 0;\r\n // current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n // toString() will return hex if it's color. The only problem is that it will return lowercased hex and if we have uppercase in data, it will think that it changed\r\n if (currentValue) {\r\n if (currentValue.toString) {\r\n currentValueStr = currentValue.toString();\r\n }\r\n else {\r\n currentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n }\r\n }\r\n var valueStr = void 0;\r\n if (value) {\r\n if (value.toString) {\r\n valueStr = value.toString();\r\n }\r\n else {\r\n valueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n }\r\n }\r\n if (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n // void\r\n }\r\n else {\r\n if (!checkOnly) {\r\n segment[propertyName] = value;\r\n }\r\n changed = true;\r\n }\r\n }\r\n });\r\n return changed;\r\n };\r\n Object.defineProperty(LineSeries.prototype, \"connect\", {\r\n /**\r\n * @return Connect?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"connect\");\r\n },\r\n /**\r\n * Connect the lines over empty data points?\r\n *\r\n * If set to `true` the line will connect two adjacent data points by a\r\n * straight line. Even if there are data points with missing values\r\n * in-between.\r\n *\r\n * If you set this to `false`, the line will break when there are missing\r\n * values.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n * @default true\r\n * @param value Connect?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"connect\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"tensionX\", {\r\n /**\r\n * @return Horizontal tension (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionX\");\r\n },\r\n /**\r\n * Horizontal tension setting of the line (0-1).\r\n *\r\n * Can be used to create smoothed lines. It works like this:\r\n *\r\n * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n * will mean that the \"tension\" is very high, so the line is maximally\r\n * attracted to the points it connects, hence the straight line.\r\n *\r\n * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n *\r\n * The smaller the tension setting, the more relaxed the line and the more\r\n * wide the curve.\r\n *\r\n * This setting is for horizontal tension, meaning the curve will bend in\r\n * such way that it never goes below or above connecting points. To enable\r\n * vertical bending as well, use `tensionY`.\r\n *\r\n * IMPORTANT: line smoothing works best when data items are placed at regular\r\n * intervals. For setups where data items are spaced erratically, enabling\r\n * smoothing might result in awkwardly looking lines.\r\n *\r\n * @default 1\r\n * @param value Horizontal tension (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionX\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"tensionY\", {\r\n /**\r\n * @return Vertical tension (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionY\");\r\n },\r\n /**\r\n * Can be used to create smoothed lines. It works like this:\r\n *\r\n * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n * will mean that the \"tension\" is very high, so the line is maximally\r\n * attracted to the points it connects, hence the straight line.\r\n *\r\n * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n *\r\n * The smaller the tension setting, the more relaxed the line and the more\r\n * wide the curve.\r\n *\r\n * This setting is for vertical tension, meaning the curve might bend in\r\n * such way that it will go below or above connected points.\r\n *\r\n * Combine this setting with `tensionX` to create beautifully looking\r\n * smoothed line series.\r\n *\r\n * @default 1\r\n * @param value Vertical tension (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n LineSeries.prototype.createLegendMarker = function (marker) {\r\n var _this = this;\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.disposeChildren();\r\n var line = marker.createChild(Line);\r\n line.shouldClone = false;\r\n //line.copyFrom(this); coppies events which is not good\r\n $object.copyProperties(this, line, visualProperties);\r\n line.x2 = w;\r\n line.y = h / 2;\r\n line.y2 = 0.00001;\r\n line.visible = true;\r\n if (this.fillOpacity > 0) {\r\n var fill = marker.createChild(Rectangle);\r\n //fill.copyFrom(this); coppies events which is not good\r\n $object.copyProperties(this, fill, visualProperties);\r\n fill.width = w;\r\n fill.height = h;\r\n fill.y = 0;\r\n fill.strokeOpacity = 0;\r\n fill.visible = true;\r\n line.y = 0;\r\n }\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = this.stroke;\r\n legendDataItem.colorOrig = this.fill;\r\n $iter.eachContinue(this.bullets.iterator(), function (bullet) {\r\n if ((bullet instanceof Bullet) && !bullet.copyToLegendMarker) {\r\n return false;\r\n }\r\n var hasLabels = false;\r\n if (bullet instanceof Container) {\r\n // do not copy bullets with labels\r\n $iter.each(bullet.children.iterator(), function (child) {\r\n if (child instanceof Label) {\r\n hasLabels = true;\r\n return true;\r\n }\r\n });\r\n }\r\n if (!hasLabels) {\r\n var clone = bullet.clone();\r\n clone.parent = marker;\r\n clone.isMeasured = true;\r\n clone.tooltipText = undefined;\r\n clone.x = w / 2;\r\n if (_this.fillOpacity > 0) {\r\n clone.y = 0;\r\n }\r\n else {\r\n clone.y = h / 2;\r\n }\r\n clone.visible = true;\r\n // otherwise will not transit to color after hiding\r\n if (!$type.hasValue(clone.fill)) {\r\n clone.fill = _this.fill;\r\n }\r\n if (!$type.hasValue(clone.stroke)) {\r\n clone.stroke = _this.stroke;\r\n }\r\n return false;\r\n }\r\n });\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.segments.clear();\r\n };\r\n Object.defineProperty(LineSeries.prototype, \"autoGapCount\", {\r\n /**\r\n * @return Gap count\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"autoGapCount\");\r\n },\r\n /**\r\n * If `connect = false` and distance between two data points is bigger\r\n * than `baseInterval * autoGapCount`, a line will break automatically.\r\n *\r\n * @since 4.2.4\r\n * @param value Gap count\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"autoGapCount\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"smoothing\", {\r\n /**\r\n * @return Smoothing algorithm\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"smoothing\");\r\n },\r\n /**\r\n * Smoothing algorithm to be used for lines.\r\n *\r\n * Available options: `\"bezier\"` (default), `\"monotoneX\"`, and `\"monotoneY\"`.\r\n *\r\n * Monotone options are best suited for data with irregular intervals. Use `\"monotoneX\"` for\r\n * horizontal lines, and `\"monotoneY\"` vertical ones.\r\n *\r\n * NOTE: Both \"monotone\" algorithms will ignore `tensionX` and `tensionY` settings.\r\n *\r\n * @since 4.10.0\r\n * @param value Smoothing algorithm\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"smoothing\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return LineSeries;\r\n}(XYSeries));\r\nexport { LineSeries };\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[\"LineSeries\"] = LineSeries;\r\nregistry.registeredClasses[\"LineSeriesDataItem\"] = LineSeriesDataItem;\r\n//# sourceMappingURL=LineSeries.js.map","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nvar LineSeriesSegment = /** @class */ (function (_super) {\r\n __extends(LineSeriesSegment, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeriesSegment() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"LineSeriesSegment\";\r\n // Set defaults\r\n _this.isMeasured = false;\r\n _this.interactionsEnabled = false;\r\n _this.layout = \"none\";\r\n // Create fill element\r\n var fillSprite = _this.createChild(Sprite);\r\n _this.fillSprite = fillSprite;\r\n fillSprite.shouldClone = false;\r\n fillSprite.setElement(_this.paper.add(\"path\"));\r\n fillSprite.isMeasured = false;\r\n _this._disposers.push(fillSprite);\r\n // Create line element\r\n var strokeSprite = _this.createChild(Sprite);\r\n _this.strokeSprite = strokeSprite;\r\n strokeSprite.shouldClone = false;\r\n strokeSprite.fill = color();\r\n strokeSprite.setElement(_this.paper.add(\"path\"));\r\n strokeSprite.isMeasured = false;\r\n _this._disposers.push(strokeSprite);\r\n return _this;\r\n }\r\n /**\r\n * Draws the series segment.\r\n *\r\n * @ignore Exclude from docs\r\n * @param points Points to connect\r\n * @param closePoints ?\r\n * @param smoothnessX Horizontal bezier setting (?)\r\n * @param smoothnessY Vertical bezier setting (?)\r\n */\r\n LineSeriesSegment.prototype.drawSegment = function (points, closePoints, smoothnessX, smoothnessY) {\r\n if (!this.disabled) {\r\n if (points.length > 0 && closePoints.length > 0 && $type.isNumber(points[0].x) && $type.isNumber(points[0].y)) {\r\n // first moveTo helps to avoid Chrome straight line in the mask bug.\r\n var path = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]);\r\n var series = this.series;\r\n if (series.smoothing == \"bezier\") {\r\n path += new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n }\r\n else if (series.smoothing == \"monotoneX\") {\r\n path += new $smoothing.MonotoneX({ closed: false }).smooth(points);\r\n }\r\n else if (series.smoothing == \"monotoneY\") {\r\n path += new $smoothing.MonotoneY({ closed: false }).smooth(points);\r\n }\r\n if (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n // like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n }\r\n else {\r\n this.strokeSprite.path = path;\r\n }\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n if ($type.isNumber(closePoints[0].x) && $type.isNumber(closePoints[0].y)) {\r\n path += $path.lineTo(closePoints[0]);\r\n if (series.smoothing == \"bezier\") {\r\n path += new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n }\r\n else if (series.smoothing == \"monotoneX\") {\r\n path += new $smoothing.MonotoneX({ closed: false }).smooth(closePoints);\r\n }\r\n else if (series.smoothing == \"monotoneY\") {\r\n path += new $smoothing.MonotoneY({ closed: false }).smooth(closePoints);\r\n }\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n }\r\n }\r\n else {\r\n this.fillSprite.path = \"\";\r\n this.strokeSprite.path = \"\";\r\n }\r\n }\r\n };\r\n /**\r\n * Copies properties from a [[Sprite]] to both line and fill elements.\r\n *\r\n * @param source Source [[Sprite]] to copy properties from\r\n */\r\n LineSeriesSegment.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n var lineElement = this.strokeSprite;\r\n $object.copyProperties(source, lineElement.properties, visualProperties);\r\n lineElement.events.copyFrom(source.strokeSprite.events);\r\n lineElement.fillOpacity = 0;\r\n var fillElement = this.fillSprite;\r\n $object.copyProperties(source, fillElement.properties, visualProperties);\r\n fillElement.events.copyFrom(source.fillSprite.events);\r\n fillElement.strokeOpacity = 0;\r\n };\r\n return LineSeriesSegment;\r\n}(Container));\r\nexport { LineSeriesSegment };\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[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n//# sourceMappingURL=LineSeriesSegment.js.map","/**\r\n * Candlestick Series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\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 [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar OHLCSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(OHLCSeriesDataItem, _super);\r\n /**\r\n * Defines a type of [[Component]] this data item is used for\r\n * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n */\r\n //public _component!: OHLCSeries;\r\n /**\r\n * Constructor\r\n */\r\n function OHLCSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"OHLCSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return OHLCSeriesDataItem;\r\n}(CandlestickSeriesDataItem));\r\nexport { OHLCSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar OHLCSeries = /** @class */ (function (_super) {\r\n __extends(OHLCSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function OHLCSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"OHLCSeries\";\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 OHLCSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"OHLC Series\");\r\n }\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 OHLCSeries.prototype.createDataItem = function () {\r\n return new OHLCSeriesDataItem();\r\n };\r\n OHLCSeries.prototype.validateCandlestick = function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n var openLine_1 = column.openLine;\r\n var highLowLine_1 = column.highLowLine;\r\n var closeLine_1 = column.closeLine;\r\n if (this.baseAxis == this.xAxis) {\r\n var x = column.pixelWidth / 2;\r\n highLowLine_1.x = x;\r\n // TODO can these be removed ?\r\n dataItem.getWorkingValue(this.yOpenField);\r\n dataItem.getWorkingValue(this.yField);\r\n var yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n var yClose = this.yAxis.getY(dataItem, this.yField);\r\n var yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n var yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n var pixelY = column.pixelY;\r\n openLine_1.y1 = yOpen - pixelY;\r\n openLine_1.y2 = yOpen - pixelY;\r\n openLine_1.x1 = 0;\r\n openLine_1.x2 = x;\r\n closeLine_1.y1 = yClose - pixelY;\r\n closeLine_1.y2 = yClose - pixelY;\r\n closeLine_1.x1 = x;\r\n closeLine_1.x2 = 2 * x;\r\n highLowLine_1.y1 = yHigh - pixelY;\r\n highLowLine_1.y2 = yLow - pixelY;\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n var y = column.pixelHeight / 2;\r\n highLowLine_1.y = y;\r\n // TODO can these be removed ?\r\n dataItem.getWorkingValue(this.xOpenField);\r\n dataItem.getWorkingValue(this.xField);\r\n var xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n var xClose = this.xAxis.getX(dataItem, this.xField);\r\n var xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n var xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n var pixelX = column.pixelX;\r\n openLine_1.x1 = xOpen - pixelX;\r\n openLine_1.x2 = xOpen - pixelX;\r\n openLine_1.y1 = y;\r\n openLine_1.y2 = 2 * y;\r\n closeLine_1.x1 = xClose - pixelX;\r\n closeLine_1.x2 = xClose - pixelX;\r\n closeLine_1.y1 = 0;\r\n closeLine_1.y2 = y;\r\n highLowLine_1.x1 = xHigh - pixelX;\r\n highLowLine_1.x2 = xLow - pixelX;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n var rangeOpenLine = rangeColumn.openLine;\r\n rangeOpenLine.x = openLine_1.x;\r\n rangeOpenLine.y = openLine_1.y;\r\n rangeOpenLine.x1 = openLine_1.x1;\r\n rangeOpenLine.x2 = openLine_1.x2;\r\n rangeOpenLine.y1 = openLine_1.y1;\r\n rangeOpenLine.y2 = openLine_1.y2;\r\n var rangeCloseLine = rangeColumn.closeLine;\r\n rangeCloseLine.x = closeLine_1.x;\r\n rangeCloseLine.y = closeLine_1.y;\r\n rangeCloseLine.x1 = closeLine_1.x1;\r\n rangeCloseLine.x2 = closeLine_1.x2;\r\n rangeCloseLine.y1 = closeLine_1.y1;\r\n rangeCloseLine.y2 = closeLine_1.y2;\r\n var rangeHighLowLine = rangeColumn.highLowLine;\r\n rangeHighLowLine.x = highLowLine_1.x;\r\n rangeHighLowLine.y = highLowLine_1.y;\r\n rangeHighLowLine.x1 = highLowLine_1.x1;\r\n rangeHighLowLine.x2 = highLowLine_1.x2;\r\n rangeHighLowLine.y1 = highLowLine_1.y1;\r\n rangeHighLowLine.y2 = highLowLine_1.y2;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n OHLCSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(OHLC);\r\n column.shouldClone = false;\r\n column.copyFrom(this.columns.template);\r\n var cw;\r\n var ch;\r\n var openLine = column.openLine;\r\n var closeLine = column.closeLine;\r\n var highLowLine = column.highLowLine;\r\n if (this.baseAxis == this.yAxis) {\r\n cw = w / 3;\r\n ch = h;\r\n highLowLine.y = h / 2;\r\n highLowLine.x2 = w;\r\n openLine.x = w / 3 * 2;\r\n openLine.y2 = h / 2;\r\n closeLine.x = w / 3;\r\n closeLine.y2 = h;\r\n closeLine.y1 = h / 2;\r\n }\r\n else {\r\n cw = w;\r\n ch = h / 3;\r\n highLowLine.x = w / 2;\r\n highLowLine.y2 = h;\r\n openLine.y = h / 3 * 2;\r\n openLine.x2 = w / 2;\r\n closeLine.y = h / 3;\r\n closeLine.x2 = w;\r\n closeLine.x1 = w / 2;\r\n }\r\n column.width = cw;\r\n column.height = ch;\r\n $object.copyProperties(this, marker, visualProperties);\r\n $object.copyProperties(this.columns.template, column, visualProperties);\r\n column.stroke = this.riseFromOpenState.properties.stroke;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.stroke;\r\n legendDataItem.colorOrig = column.stroke;\r\n };\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n OHLCSeries.prototype.createColumnTemplate = function () {\r\n return new OHLC();\r\n };\r\n return OHLCSeries;\r\n}(CandlestickSeries));\r\nexport { OHLCSeries };\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[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n//# sourceMappingURL=OHLCSeries.js.map","/**\r\n * Defines Percent Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Tick } from \"../elements/Tick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\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//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PercentSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PercentSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PercentSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Adds an `id` attribute the the slice element and returns its id.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeriesDataItem.prototype.uidAttr = function () {\r\n return this.slice.uidAttr();\r\n };\r\n /**\r\n * Hide the data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param toValue Target value for animation\r\n * @param fields Fields to animate while hiding\r\n */\r\n PercentSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n if (!fields) {\r\n fields = [\"value\"];\r\n }\r\n return _super.prototype.hide.call(this, duration, delay, 0, fields);\r\n };\r\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Data Item\r\n */\r\n PercentSeriesDataItem.prototype.setVisibility = function (value, noChangeValues) {\r\n if (!noChangeValues) {\r\n if (value) {\r\n this.setWorkingValue(\"value\", this.values[\"value\"].value, 0, 0);\r\n }\r\n else {\r\n this.setWorkingValue(\"value\", 0, 0, 0);\r\n }\r\n }\r\n _super.prototype.setVisibility.call(this, value, noChangeValues);\r\n };\r\n /**\r\n * Show hidden data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param fields Fields to animate while hiding\r\n */\r\n PercentSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n if (!fields) {\r\n fields = [\"value\"];\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"category\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.properties.category;\r\n },\r\n /**\r\n * Category.\r\n *\r\n * @param value Category\r\n */\r\n set: function (value) {\r\n this.setProperty(\"category\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a marker used in the legend for this slice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Marker container\r\n */\r\n PercentSeriesDataItem.prototype.createLegendMarker = function (marker) {\r\n this.component.createLegendMarker(marker, this);\r\n };\r\n Object.defineProperty(PercentSeriesDataItem.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 Object.defineProperty(PercentSeriesDataItem.prototype, \"tick\", {\r\n /**\r\n * A Tick element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Tick element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._tick) {\r\n var tick_1 = this.component.ticks.create();\r\n this._tick = tick_1;\r\n this.addSprite(tick_1);\r\n this._disposers.push(tick_1);\r\n tick_1.parent = this.component.ticksContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.ticks.removeValue(tick_1);\r\n }\r\n }));\r\n tick_1.visible = this.visible;\r\n }\r\n return this._tick;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"label\", {\r\n /**\r\n * A Label element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Label element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._label) {\r\n var label_1 = this.component.labels.create();\r\n this.addSprite(label_1);\r\n this._label = label_1;\r\n this._disposers.push(label_1);\r\n label_1.parent = this.component.labelsContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.labels.removeValue(label_1);\r\n }\r\n }));\r\n label_1.visible = this.visible;\r\n }\r\n return this._label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"slice\", {\r\n /**\r\n * An element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Slice element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._slice) {\r\n var component_1 = this.component;\r\n var slice_1 = component_1.slices.create();\r\n this.addSprite(slice_1);\r\n this._slice = slice_1;\r\n this._disposers.push(slice_1);\r\n slice_1.parent = component_1.slicesContainer;\r\n this._disposers.push(new Disposer(function () {\r\n component_1.slices.removeValue(slice_1);\r\n }));\r\n slice_1.visible = this.visible;\r\n // Apply accessibility\r\n if (component_1.itemsFocusable()) {\r\n if (!$type.hasValue(this.component.role)) {\r\n this.component.role = \"menu\";\r\n }\r\n if (!$type.hasValue(slice_1.role)) {\r\n slice_1.role = \"menuitem\";\r\n }\r\n slice_1.focusable = true;\r\n }\r\n else {\r\n if (!$type.hasValue(this.component.role)) {\r\n this.component.role = \"list\";\r\n }\r\n if (!$type.hasValue(slice_1.role)) {\r\n slice_1.role = \"listitem\";\r\n }\r\n slice_1.focusable = false;\r\n }\r\n // Apply screen reader label\r\n if (slice_1.focusable) {\r\n slice_1.events.on(\"focus\", function (ev) {\r\n slice_1.readerTitle = component_1.populateString(component_1.itemReaderText, _this);\r\n }, undefined, false);\r\n slice_1.events.on(\"blur\", function (ev) {\r\n slice_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n if (slice_1.hoverable) {\r\n slice_1.events.on(\"over\", function (ev) {\r\n slice_1.readerTitle = component_1.populateString(component_1.itemReaderText, _this);\r\n }, undefined, false);\r\n slice_1.events.on(\"out\", function (ev) {\r\n slice_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n }\r\n return this._slice;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"hiddenInLegend\", {\r\n /**\r\n * @return Disabled in legend?\r\n */\r\n get: function () {\r\n return this.properties.hiddenInLegend;\r\n },\r\n /**\r\n * Should dataItem (slice) be hidden in legend?\r\n *\r\n * @param value Visible in legend?\r\n */\r\n set: function (value) {\r\n this.setProperty(\"hiddenInLegend\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PercentSeriesDataItem;\r\n}(SeriesDataItem));\r\nexport { PercentSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[PercentSeries]] which is a base class for [[PieSeries]],\r\n * [[FunnelSeries]], and [[PyramidSeries]].\r\n *\r\n * @see {@link IPercentSeriesEvents} for a list of available Events\r\n * @see {@link IPercentSeriesAdapters} for a list of available Adapters\r\n */\r\nvar PercentSeries = /** @class */ (function (_super) {\r\n __extends(PercentSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentSeries\";\r\n _this._addAllDataItems = false;\r\n _this.colors = new ColorSet();\r\n _this.colors.step = 1;\r\n _this.isMeasured = true;\r\n _this.calculatePercent = true;\r\n var slicesContainer = _this.createChild(Container);\r\n slicesContainer.shouldClone = false;\r\n slicesContainer.isMeasured = false;\r\n _this.slicesContainer = slicesContainer;\r\n var ticksContainer = _this.createChild(Container);\r\n ticksContainer.shouldClone = false;\r\n ticksContainer.isMeasured = false;\r\n ticksContainer.layout = \"none\";\r\n _this.ticksContainer = ticksContainer;\r\n var labelsContainer = _this.createChild(Container);\r\n labelsContainer.shouldClone = false;\r\n labelsContainer.isMeasured = false;\r\n labelsContainer.layout = \"none\";\r\n _this.labelsContainer = labelsContainer;\r\n _this.alignLabels = false;\r\n _this.bulletsContainer.toFront();\r\n // Make all slices focusable\r\n _this.skipFocusThreshold = 50;\r\n var defaultState = _this.defaultState;\r\n defaultState.transitionEasing = $ease.sinOut;\r\n // Accessibility\r\n _this.itemReaderText = \"{category}: {value.percent.formatNumber('#.#p')}\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates a slice element.\r\n *\r\n * @return Slice\r\n */\r\n PercentSeries.prototype.createSlice = function () {\r\n return new Sprite();\r\n };\r\n /**\r\n * Creates a tick element.\r\n *\r\n * @return Tick\r\n */\r\n PercentSeries.prototype.createTick = function () {\r\n return new Tick();\r\n };\r\n /**\r\n * Sreates label element.\r\n *\r\n * @return label\r\n */\r\n PercentSeries.prototype.createLabel = function () {\r\n return new Label();\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"slices\", {\r\n /**\r\n * A list of slice elements for the series.\r\n *\r\n * Use its `template` to configure look and behavior of the slices. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.slices.template.stroke = am4core.color(\"#fff\");\r\n * series.slices.template.strokeWidth = 2;\r\n * ```\r\n * ```JavaScript\r\n * series.slices.template.stroke = am4core.color(\"#fff\");\r\n * series.slices.template.strokeWidth = 2;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"slices\": {\r\n * \"stroke\": \"#fff\",\r\n * \"strokeWidth\": 2\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Slices\r\n */\r\n get: function () {\r\n if (!this._slices) {\r\n var slice = this.createSlice();\r\n slice.applyOnClones = true;\r\n this._disposers.push(slice);\r\n this.initSlice(slice);\r\n this._slices = new ListTemplate(slice);\r\n this._disposers.push(new ListDisposer(this._slices));\r\n }\r\n return this._slices;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeries.prototype, \"ticks\", {\r\n /**\r\n * A list of tick elements for the series. Ticks connect slice to its label.\r\n *\r\n * Use its `template` to configure look and behavior of the ticks. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.ticks.template.strokeWidth = 2;\r\n * ```\r\n * ```JavaScript\r\n * series.ticks.template.strokeWidth = 2;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"ticks\": {\r\n * \"strokeWidth\": 2\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Ticks\r\n */\r\n get: function () {\r\n if (!this._ticks) {\r\n var tick = this.createTick();\r\n tick.applyOnClones = true;\r\n this._disposers.push(tick);\r\n this.initTick(tick);\r\n this._ticks = new ListTemplate(tick);\r\n this._disposers.push(new ListDisposer(this._ticks));\r\n }\r\n return this._ticks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeries.prototype, \"labels\", {\r\n /**\r\n * A list of slice label elements for the series.\r\n *\r\n * Use its `template` to configure look and behavior of the labels. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.labels.template.fill = am4core.color(\"#c00\");\r\n * series.labels.template.fontSize = 20;\r\n * ```\r\n * ```JavaScript\r\n * series.labels.template.fill = am4core.color(\"#c00\");\r\n * series.labels.template.fontSize = 20;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"labels\": {\r\n * \"stroke\": \"#c00\",\r\n * \"fontSize\": 20\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Labels\r\n */\r\n get: function () {\r\n if (!this._labels) {\r\n var label = this.createLabel();\r\n label.applyOnClones = true;\r\n this._disposers.push(label);\r\n this.initLabel(label);\r\n this._labels = new ListTemplate(label);\r\n this._disposers.push(new ListDisposer(this._labels));\r\n }\r\n return this._labels;\r\n },\r\n enumerable: true,\r\n configurable: true\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 PercentSeries.prototype.createDataItem = function () {\r\n return new PercentSeriesDataItem();\r\n };\r\n /**\r\n * Creates and returns a new slice element.\r\n *\r\n * @param sliceType Type of the slice element\r\n * @return Slice\r\n */\r\n PercentSeries.prototype.initSlice = function (slice) {\r\n };\r\n PercentSeries.prototype.initLabel = function (label) {\r\n label.text = \"{category}: {value.percent.formatNumber('#.0p')}\";\r\n label.isMeasured = false;\r\n label.padding(5, 5, 5, 5);\r\n };\r\n PercentSeries.prototype.initTick = function (label) {\r\n };\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeries.prototype.validateDataItems = function () {\r\n this.colors.reset();\r\n if (this.patterns) {\r\n this.patterns.reset();\r\n }\r\n _super.prototype.validateDataItems.call(this);\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.validateDataElement = function (dataItem) {\r\n var slice = dataItem.slice;\r\n if (slice) {\r\n if (slice.fill == undefined) {\r\n if (this.patterns) {\r\n if (!$type.hasValue(slice.stroke)) {\r\n slice.stroke = this.colors.next();\r\n }\r\n slice.fill = this.patterns.next();\r\n if ($type.hasValue(slice.fillOpacity)) {\r\n slice.fill.backgroundOpacity = slice.fillOpacity;\r\n }\r\n if (slice.stroke instanceof Color) {\r\n slice.fill.stroke = slice.stroke;\r\n slice.fill.fill = slice.stroke;\r\n }\r\n }\r\n else {\r\n slice.fill = this.colors.next();\r\n }\r\n }\r\n else {\r\n this.colors.currentStep += this.colors.step;\r\n }\r\n if (slice.stroke == undefined) {\r\n slice.stroke = slice.fill;\r\n }\r\n }\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n if (slice) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n if (bullet.fill == undefined) {\r\n bullet.fill = slice.fill;\r\n }\r\n if (bullet.stroke == undefined) {\r\n bullet.stroke = slice.stroke;\r\n }\r\n });\r\n }\r\n this.updateLegendValue(dataItem);\r\n };\r\n /**\r\n * Validates (processes) data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeries.prototype.validateData = function () {\r\n _super.prototype.validateData.call(this);\r\n if (this.chart) {\r\n this.chart.feedLegend();\r\n }\r\n };\r\n /**\r\n * Arranges slice labels according to position settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItems Data items\r\n */\r\n PercentSeries.prototype.arrangeLabels = function (dataItems) {\r\n for (var i = 0, len = dataItems.length; i < len; i++) {\r\n var dataItem = dataItems[i];\r\n var label = dataItem.label;\r\n if (label) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n var lh = label.measuredHeight;\r\n if (!label.visible) {\r\n lh = 0;\r\n }\r\n if (label.pixelY - lh / 2 < -this.maxHeight / 2) {\r\n label.y = -this.maxHeight / 2 + lh / 2;\r\n }\r\n var nextLabel = this.getNextLabel(i + 1, dataItems);\r\n var bottom = label.pixelY + lh / 2;\r\n if (nextLabel) {\r\n if (nextLabel.invalid) {\r\n nextLabel.validate();\r\n }\r\n var nextLabelHeight = nextLabel.measuredHeight;\r\n if (!nextLabel.visible) {\r\n nextLabelHeight = 0;\r\n }\r\n var nextLabelY = nextLabel.pixelY;\r\n if (nextLabelY == null) {\r\n nextLabelY = 0;\r\n }\r\n if (nextLabelY - nextLabelHeight / 2 < bottom) {\r\n nextLabel.y = bottom + nextLabelHeight / 2;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n PercentSeries.prototype.arrangeLabels2 = function (dataItems) {\r\n var previousTop = this.maxHeight / 2;\r\n for (var i = dataItems.length - 1; i >= 0; i--) {\r\n var dataItem = dataItems[i];\r\n var label = dataItem.label;\r\n if (label) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n var lh = label.measuredHeight;\r\n if (!label.visible) {\r\n lh = 0;\r\n }\r\n //if (i == dataItems.length - 1) {\r\n //previousTop += lh / 2;\r\n //}\r\n if (label.pixelY + lh / 2 > previousTop) {\r\n label.y = previousTop - lh / 2;\r\n previousTop = label.y - lh / 2;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Returns the next label according to `index`.\r\n *\r\n * @param index Current index\r\n * @param dataItems Data items\r\n * @return Label element\r\n */\r\n PercentSeries.prototype.getNextLabel = function (index, dataItems) {\r\n if (dataItems.length >= index) {\r\n var nextDataItem = dataItems[index];\r\n if (nextDataItem) {\r\n if (nextDataItem.label) {\r\n if (nextDataItem.visible) {\r\n return nextDataItem.label;\r\n }\r\n else {\r\n return this.getNextLabel(index + 1, dataItems);\r\n }\r\n }\r\n else {\r\n return this.getNextLabel(index + 1, dataItems);\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"colors\", {\r\n /**\r\n * @return Color set\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"colors\");\r\n },\r\n /**\r\n * A color set to be used for slices.\r\n *\r\n * For each new subsequent slice, the chart will assign the next color in\r\n * this set.\r\n *\r\n * @param value Color set\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(PercentSeries.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 * Binds related legend data item's visual settings to this series' visual\r\n * settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Container\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.createLegendMarker = function (marker, dataItem) {\r\n $iter.each(marker.children.iterator(), function (child) {\r\n var slice = dataItem.slice;\r\n child.defaultState.properties.fill = slice.fill;\r\n child.defaultState.properties.stroke = slice.stroke;\r\n child.defaultState.properties.fillOpacity = slice.fillOpacity;\r\n child.defaultState.properties.strokeOpacity = slice.strokeOpacity;\r\n child.fill = slice.fill;\r\n child.stroke = slice.stroke;\r\n child.fillOpacity = slice.fillOpacity;\r\n child.strokeOpacity = slice.strokeOpacity;\r\n if (child.fill == undefined) {\r\n child.__disabled = true;\r\n }\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = slice.fill;\r\n legendDataItem.colorOrig = slice.fill;\r\n child.addDisposer(slice.events.on(\"propertychanged\", function (ev) {\r\n if (ev.property == \"fill\") {\r\n child.__disabled = false;\r\n if (!child.isActive) {\r\n child.fill = slice.fill;\r\n }\r\n child.defaultState.properties.fill = slice.fill;\r\n legendDataItem.color = slice.fill;\r\n legendDataItem.colorOrig = slice.fill;\r\n }\r\n if (ev.property == \"stroke\") {\r\n if (!child.isActive) {\r\n child.stroke = slice.stroke;\r\n }\r\n child.defaultState.properties.stroke = slice.stroke;\r\n }\r\n if (ev.property == \"strokeOpacity\") {\r\n if (!child.isActive) {\r\n child.strokeOpacity = slice.strokeOpacity;\r\n }\r\n child.defaultState.properties.strokeOpacity = slice.strokeOpacity;\r\n }\r\n }, undefined, false));\r\n });\r\n };\r\n /**\r\n * Repositions bullets when slice's size changes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PercentSeries.prototype.handleSliceScale = function (event) {\r\n var _this = this;\r\n var slice = event.target;\r\n var dataItem = slice.dataItem;\r\n if (dataItem && dataItem.bullets) {\r\n $iter.each(dataItem.bullets.iterator(), function (a) {\r\n var value = a[1];\r\n _this.positionBullet(value);\r\n });\r\n }\r\n };\r\n /**\r\n * Repositions bullet and labels when slice moves.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PercentSeries.prototype.handleSliceMove = function (event) {\r\n };\r\n /**\r\n * Copies all properties from another instance of [[PercentSeries]].\r\n *\r\n * @param source Source series\r\n */\r\n PercentSeries.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.slices.template.copyFrom(source.slices.template);\r\n this.labels.template.copyFrom(source.labels.template);\r\n this.ticks.template.copyFrom(source.ticks.template);\r\n this.colors = source.colors.clone();\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"alignLabels\", {\r\n /**\r\n * @return Align labels?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"alignLabels\");\r\n },\r\n /**\r\n * Align labels into nice vertical columns?\r\n *\r\n * This will ensure that labels never overlap with each other.\r\n *\r\n * Arranging labels into columns makes them more readble, and better user\r\n * experience.\r\n *\r\n * If set to `false` labels will be positioned at `label.radius` distance,\r\n * and may, in some cases, overlap.\r\n *\r\n * @default true\r\n * @param value Align labels?\r\n */\r\n set: function (value) {\r\n this.setAlignLabels(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n PercentSeries.prototype.setAlignLabels = function (value) {\r\n this.setPropertyValue(\"alignLabels\", value, true);\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"ignoreZeroValues\", {\r\n /**\r\n * @return Ignore zero values\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ignoreZeroValues\");\r\n },\r\n /**\r\n * If set to `true` the chart will not show slices with zero values.\r\n *\r\n * @default false\r\n * @since 4.7.9\r\n * @param value Ignore zero values\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"ignoreZeroValues\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.updateLegendValue = function (dataItem) {\r\n if (dataItem) {\r\n var legendDataItem = dataItem.legendDataItem;\r\n var legendSettings = dataItem.legendSettings;\r\n if (legendDataItem && legendSettings) {\r\n if (legendSettings) {\r\n if (legendSettings.labelText) {\r\n legendDataItem.label.text = legendSettings.labelText;\r\n }\r\n if (legendSettings.itemLabelText) {\r\n legendDataItem.label.text = legendSettings.itemLabelText;\r\n }\r\n if (legendSettings.valueText) {\r\n legendDataItem.valueLabel.text = legendSettings.valueText;\r\n }\r\n if (legendSettings.itemValueText) {\r\n legendDataItem.valueLabel.text = legendSettings.itemValueText;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n return PercentSeries;\r\n}(Series));\r\nexport { PercentSeries };\r\n/**\r\n * bboxter 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[\"PercentSeries\"] = PercentSeries;\r\nregistry.registeredClasses[\"PercentSeriesDataItem\"] = PercentSeriesDataItem;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Disable labels and ticks.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof PercentSeries) {\r\n var state = target.states.create(stateId);\r\n var labelState = target.labels.template.states.create(stateId);\r\n labelState.properties.disabled = true;\r\n var tickState = target.ticks.template.states.create(stateId);\r\n tickState.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=PercentSeries.js.map","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PictorialStackedSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PictorialStackedSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PictorialStackedSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PictorialStackedSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PictorialStackedSeriesDataItem;\r\n}(PyramidSeriesDataItem));\r\nexport { PictorialStackedSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} 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 PictorialStackedSeries = /** @class */ (function (_super) {\r\n __extends(PictorialStackedSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PictorialStackedSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PictorialStackedSeries\";\r\n _this.topWidth = percent(100);\r\n _this.bottomWidth = percent(100);\r\n _this.valueIs = \"height\";\r\n _this.applyTheme();\r\n _this.startLocation = 0;\r\n _this.endLocation = 1;\r\n _this.align = \"center\";\r\n _this.valign = \"middle\";\r\n _this._maskSprite = _this.slicesContainer.createChild(Sprite);\r\n _this._maskSprite.visible = false;\r\n _this._maskSprite.zIndex = 100;\r\n _this._maskSprite.shouldClone = false;\r\n return _this;\r\n }\r\n /**\r\n * Sizes the mask to fit the series.\r\n *\r\n * @ignore\r\n */\r\n PictorialStackedSeries.prototype.validateDataElements = function () {\r\n var maxWidth = this.slicesContainer.maxWidth;\r\n var maxHeight = this.slicesContainer.maxHeight;\r\n var maskSprite = this._maskSprite;\r\n //maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n var pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n var pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n var scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n if (scale == Infinity) {\r\n scale = 1; // can't return here, won't draw legend properly\r\n }\r\n scale = $math.max(0.001, scale);\r\n var startLocation = this.startLocation;\r\n var endLocation = this.endLocation;\r\n var newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n var newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n maskSprite.scale = scale;\r\n if (this.orientation == \"vertical\") {\r\n this.topWidth = newWidth + 4;\r\n this.bottomWidth = newWidth + 4;\r\n this.pyramidHeight = newHeight * (endLocation - startLocation);\r\n maskSprite.x = maxWidth / 2;\r\n maskSprite.y = newHeight / 2;\r\n }\r\n else {\r\n this.topWidth = newHeight + 4;\r\n this.bottomWidth = newHeight + 4;\r\n this.pyramidHeight = newWidth * (endLocation - startLocation);\r\n maskSprite.valign = \"middle\";\r\n maskSprite.x = newWidth / 2;\r\n maskSprite.y = maxHeight / 2;\r\n }\r\n maskSprite.verticalCenter = \"middle\";\r\n maskSprite.horizontalCenter = \"middle\";\r\n _super.prototype.validateDataElements.call(this);\r\n var y;\r\n var x;\r\n if (this.orientation == \"vertical\") {\r\n if (this.valign == \"bottom\") {\r\n y = (maxHeight - newHeight);\r\n }\r\n if (this.valign == \"middle\") {\r\n y = (maxHeight - newHeight) / 2;\r\n }\r\n if (this.valign == \"top\") {\r\n y = 0;\r\n }\r\n if (this.align == \"left\") {\r\n x = -(maxWidth - newWidth) / 2;\r\n }\r\n if (this.align == \"center\") {\r\n x = 0;\r\n }\r\n if (this.align == \"right\") {\r\n x = (maxWidth - newWidth) / 2;\r\n }\r\n this.slices.template.dy = startLocation * newHeight;\r\n if (this.alignLabels) {\r\n this.slicesContainer.dx = x;\r\n }\r\n }\r\n else {\r\n if (this.valign == \"bottom\") {\r\n y = (maxHeight - newHeight) / 2;\r\n }\r\n if (this.valign == \"middle\") {\r\n y = 0;\r\n }\r\n if (this.valign == \"top\") {\r\n y = -(maxHeight - newHeight) / 2;\r\n }\r\n if (this.align == \"left\") {\r\n x = 0;\r\n }\r\n if (this.align == \"center\") {\r\n x = (maxWidth - newWidth) / 2;\r\n }\r\n if (this.align == \"right\") {\r\n x = (maxWidth - newWidth);\r\n }\r\n this.slices.template.dx = startLocation * newWidth;\r\n if (this.alignLabels) {\r\n this.slicesContainer.dy = y;\r\n }\r\n }\r\n this.slicesContainer.x = x;\r\n this.labelsContainer.x = x;\r\n this.ticksContainer.x = x;\r\n this.slicesContainer.y = y;\r\n this.labelsContainer.y = y;\r\n this.ticksContainer.y = y;\r\n if (newWidth > 0 && newHeight > 0) {\r\n this.slicesContainer.mask = maskSprite;\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 PictorialStackedSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pyramid Series\");\r\n }\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 PictorialStackedSeries.prototype.createDataItem = function () {\r\n return new PictorialStackedSeriesDataItem();\r\n };\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"maskSprite\", {\r\n /**\r\n * A [[Sprite]] element that is used as a series mask.\r\n *\r\n * If set, this element's shape will be used to apply shape to the whole\r\n * stacked pictorial series.\r\n *\r\n * You can use this element's `path` property to set an SVG path for the\r\n * shape:\r\n *\r\n * ```TypeScript\r\n * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n * // ...\r\n * series.maskSprite.path = iconPath;\r\n * ```\r\n * ```JavaScript\r\n * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n * // ...\r\n * series.maskSprite.path = iconPath;\r\n * ```\r\n * ```JSON\r\n * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n * // ...\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"PictorialStackedSeries\",\r\n * // ...\r\n * \"maskSprite\": {\r\n * \"path\": iconPath\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Mask sprite\r\n */\r\n get: function () {\r\n return this._maskSprite;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Inits FunnelSlice.\r\n *\r\n * @param slice to init\r\n */\r\n PictorialStackedSeries.prototype.initSlice = function (slice) {\r\n _super.prototype.initSlice.call(this, slice);\r\n var hs = slice.states.getKey(\"hover\");\r\n if (hs) {\r\n hs.properties.expandDistance = 0;\r\n }\r\n };\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"startLocation\", {\r\n /**\r\n * @return Start location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * Relative location to start series from.\r\n *\r\n * Range of values: 0 to 1.\r\n *\r\n * This setting indicates where actual slices will start relatively to the\r\n * whole height/width of the series.\r\n *\r\n * For example, if we want slices to start at 30% from the top/left of the\r\n * series, we can set `startLocation = 0.3`.\r\n *\r\n * To fill shape outside of the location range, use background of the\r\n * property `slicesContainer`.\r\n *\r\n * ```TypeScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JavaScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"startLocation\": 0.2,\r\n * \"endLocation\": 0.8,\r\n * \"slicesContainer\": {\r\n * \"background\": {\r\n * \"fill\": \"#eee\"\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 0\r\n * @since 4.1.13\r\n * @param value Start location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startLocation\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"endLocation\", {\r\n /**\r\n * @return End location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Relative location to end series at.\r\n *\r\n * Range of values: 0 to 1.\r\n *\r\n * This setting indicates where actual slices will end relatively to the\r\n * whole height/width of the series.\r\n *\r\n * For example, if we want slices to end at 70% from the top/left of the\r\n * series, we can set `endLocation = 0.7`.\r\n *\r\n * To fill shape outside of the location range, use background of the\r\n * property `slicesContainer`.\r\n *\r\n * ```TypeScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JavaScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"startLocation\": 0.2,\r\n * \"endLocation\": 0.8,\r\n * \"slicesContainer\": {\r\n * \"background\": {\r\n * \"fill\": \"#eee\"\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 1\r\n * @since 4.1.13\r\n * @param value End location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endLocation\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PictorialStackedSeries;\r\n}(PyramidSeries));\r\nexport { PictorialStackedSeries };\r\n/**\r\n * bboxter 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[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n//# sourceMappingURL=PictorialStackedSeries.js.map","/**\r\n * Defines Pie Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\n//import { Slice3D } from \"../../core/elements/3D/Slice3D\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { PieTick } from \"../elements/PieTick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PieSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeriesDataItem\";\r\n _this.values.radiusValue = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieSeriesDataItem.prototype, \"radiusValue\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.values.radiusValue.value;\r\n },\r\n /**\r\n * Slice's radius, if other than default.\r\n *\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setValue(\"radiusValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hide the data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param toValue Target value for animation\r\n * @param fields Fields to animate while hiding\r\n */\r\n PieSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n return _super.prototype.hide.call(this, duration, delay, 0, [\"value\", \"radiusValue\"]);\r\n };\r\n /**\r\n * Show hidden data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param fields Fields to animate while hiding\r\n */\r\n PieSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n return _super.prototype.show.call(this, duration, delay, [\"value\", \"radiusValue\"]);\r\n };\r\n return PieSeriesDataItem;\r\n}(PercentSeriesDataItem));\r\nexport { PieSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a slice series on a Pie chart.\r\n *\r\n * @see {@link IPieSeriesEvents} for a list of available Events\r\n * @see {@link IPieSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar PieSeries = /** @class */ (function (_super) {\r\n __extends(PieSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries\";\r\n _this.alignLabels = true;\r\n //this.startAngle = -90;\r\n //this.endAngle = 270;\r\n _this.layout = \"none\";\r\n _this.labels.template.radius = percent(5);\r\n _this.addDisposer(_this.labels.template.events.on(\"enabled\", _this.invalidate, _this, false));\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * creates slice\r\n */\r\n PieSeries.prototype.createSlice = function () {\r\n return new Slice();\r\n };\r\n /**\r\n * creates tick\r\n */\r\n PieSeries.prototype.createTick = function () {\r\n return new PieTick();\r\n };\r\n /**\r\n * creates label\r\n */\r\n PieSeries.prototype.createLabel = function () {\r\n return new AxisLabelCircular();\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 PieSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pie Slice Series\");\r\n }\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 PieSeries.prototype.createDataItem = function () {\r\n return new PieSeriesDataItem();\r\n };\r\n /**\r\n * Inits slice.\r\n *\r\n * @param slice to init\r\n */\r\n PieSeries.prototype.initSlice = function (slice) {\r\n slice.isMeasured = false;\r\n slice.defaultState.properties.scale = 1;\r\n slice.observe(\"scale\", this.handleSliceScale, this);\r\n slice.observe([\"dx\", \"dy\", \"x\", \"y\", \"shiftRadius\"], this.handleSliceMove, this);\r\n slice.tooltipText = \"{category}: {value.percent.formatNumber('#.#p')} ({value.value})\";\r\n var hoverState = slice.states.create(\"hover\");\r\n hoverState.properties.scale = 1.05;\r\n var defaultState = slice.defaultState;\r\n defaultState.properties.shiftRadius = 0;\r\n slice.togglable = true;\r\n slice.events.on(\"toggled\", function (event) {\r\n event.target.hideTooltip();\r\n // The following takes care of removing hover on subsequent click of\r\n // a slice\r\n if (event.target.interactions.lastHitPointer\r\n && event.target.interactions.lastHitPointer.touch\r\n && !event.target.isActive) {\r\n event.target.isHover = false;\r\n }\r\n });\r\n var activeState = slice.states.create(\"active\");\r\n activeState.properties.shiftRadius = 0.10;\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieSeries.prototype.validate = function () {\r\n this._leftItems = [];\r\n this._rightItems = [];\r\n this._currentStartAngle = this.startAngle;\r\n this._arcRect = $math.getArcRect(this.startAngle, this.endAngle);\r\n this._maxRadiusPercent = 0;\r\n for (var i = this.startIndex; i < this.endIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var radiusValuePercent = dataItem.values.radiusValue.percent;\r\n if (radiusValuePercent > this._maxRadiusPercent) {\r\n this._maxRadiusPercent = radiusValuePercent;\r\n }\r\n }\r\n _super.prototype.validate.call(this);\r\n if (this.alignLabels) {\r\n if (this.startAngle > this.endAngle) {\r\n this._rightItems.reverse();\r\n }\r\n else {\r\n this._leftItems.reverse();\r\n }\r\n this._rightItems.sort(function (a, b) {\r\n var aAngle = (a.slice.middleAngle + 360) % 360;\r\n var bAngle = (b.slice.middleAngle + 360) % 360;\r\n if (aAngle > 270) {\r\n aAngle -= 360;\r\n }\r\n if (bAngle > 270) {\r\n bAngle -= 360;\r\n }\r\n if (aAngle < bAngle) {\r\n return -1;\r\n }\r\n else if (aAngle > bAngle) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n this._leftItems.sort(function (a, b) {\r\n var aAngle = (a.slice.middleAngle + 360) % 360;\r\n var bAngle = (b.slice.middleAngle + 360) % 360;\r\n if (aAngle < bAngle) {\r\n return 1;\r\n }\r\n else if (aAngle > bAngle) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n this.arrangeLabels(this._rightItems);\r\n this.arrangeLabels2(this._rightItems);\r\n this.arrangeLabels(this._leftItems);\r\n this.arrangeLabels2(this._leftItems);\r\n }\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PieSeries.prototype.validateDataElement = function (dataItem) {\r\n if (this.pixelRadius > 0) {\r\n if (this.ignoreZeroValues && (dataItem.value == 0 || dataItem.value == null)) {\r\n dataItem.__disabled = true;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n // SLICE\r\n var slice = dataItem.slice;\r\n slice.radius = this.pixelRadius;\r\n if ($type.isNumber(dataItem.radiusValue)) {\r\n slice.radius = this.pixelInnerRadius + (this.pixelRadius - this.pixelInnerRadius) * dataItem.values.radiusValue.percent / this._maxRadiusPercent;\r\n }\r\n if (!(slice.innerRadius instanceof Percent)) {\r\n slice.innerRadius = this.pixelInnerRadius;\r\n }\r\n slice.startAngle = this._currentStartAngle;\r\n slice.arc = Math.abs(dataItem.values.value.percent) * (this.endAngle - this.startAngle) / 100;\r\n // LABEL\r\n if (!this.labels.template.disabled) {\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n tick.slice = slice;\r\n tick.label = label;\r\n var normalizedMiddleAngle = (slice.middleAngle + 360) % 360; // force angle to be 0 - 360;\r\n var point = void 0;\r\n if (this.alignLabels) {\r\n var labelRadius = label.pixelRadius(slice.radius);\r\n var x = tick.length + labelRadius;\r\n label.dx = 0;\r\n label.dy = 0;\r\n label.verticalCenter = \"middle\";\r\n var arcRect = this._arcRect;\r\n // right half\r\n if (normalizedMiddleAngle > 270 || normalizedMiddleAngle <= 90) {\r\n x += (arcRect.width + arcRect.x) * this.pixelRadius;\r\n label.horizontalCenter = \"left\";\r\n this._rightItems.push(dataItem);\r\n }\r\n // left half\r\n else {\r\n x -= arcRect.x * this.pixelRadius;\r\n label.horizontalCenter = \"right\";\r\n this._leftItems.push(dataItem);\r\n x *= -1;\r\n }\r\n var distance = slice.radius + tick.length + labelRadius;\r\n point = { x: x, y: slice.iy * distance };\r\n label.moveTo(point);\r\n }\r\n else {\r\n var depth = slice[\"depth\"];\r\n if (!$type.isNumber(depth)) {\r\n depth = 0;\r\n }\r\n label.fixPosition(slice.middleAngle, slice.radius, slice.radiusY, 0, -depth);\r\n }\r\n }\r\n this._currentStartAngle += slice.arc;\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n }\r\n };\r\n Object.defineProperty(PieSeries.prototype, \"radius\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius for the series' slices in pixels or [[Percent]].\r\n *\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"pixelRadius\", {\r\n /**\r\n * @return Radius\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._pixelRadius;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (this._pixelRadius != value) {\r\n this._pixelRadius = value;\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * @return Pixel inner radius\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._pixelInnerRadius;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (this._pixelInnerRadius != value) {\r\n this._pixelInnerRadius = value;\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"innerRadius\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius for the series' slices in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Redo so that users can set it\r\n * @param value 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(PieSeries.prototype, \"startAngle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n var startAngle = this.getPropertyValue(\"startAngle\");\r\n if ($type.isNumber(startAngle)) {\r\n return startAngle;\r\n }\r\n else {\r\n return this._startAngleInternal;\r\n }\r\n },\r\n /**\r\n * Start angle for the series' slices in degrees. (0-360)\r\n *\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"endAngle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n var endAngle = this.getPropertyValue(\"endAngle\");\r\n if ($type.isNumber(endAngle)) {\r\n return endAngle;\r\n }\r\n else {\r\n return this._endAngleInternal;\r\n }\r\n },\r\n /**\r\n * End angle for the series' slices in degrees. (0-360)\r\n *\r\n * @param value Angle\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 /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n PieSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n var locationX = bullet.locationX;\r\n if (!$type.isNumber(locationX)) {\r\n locationX = 0.5;\r\n }\r\n var locationY = bullet.locationY;\r\n if (!$type.isNumber(locationY)) {\r\n locationY = 1;\r\n }\r\n var angle = slice.startAngle + slice.arc * locationX;\r\n bullet.x = locationY * slice.radius * $math.cos(angle);\r\n bullet.y = locationY * slice.radiusY * $math.sin(angle);\r\n };\r\n /**\r\n * Repositions bullet and labels when slice moves.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PieSeries.prototype.handleSliceMove = function (event) {\r\n if (!this.alignLabels) {\r\n var slice = event.target;\r\n var dataItem = slice.dataItem;\r\n // moving textelement, as label dx and dy are already employed for aligning\r\n //@labeltodo\r\n if (dataItem) {\r\n var label = dataItem.label;\r\n if (label) {\r\n label.dx = label.fdx + slice.dx + slice.pixelX;\r\n label.dy = label.fdy + slice.dy + slice.pixelY;\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(PieSeries.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n var chart = this.chart;\r\n if (chart) {\r\n return $math.getArcRect(chart.startAngle, chart.endAngle, this.pixelRadius);\r\n }\r\n return $math.getArcRect(this.startAngle, this.endAngle, this.pixelRadius);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieSeries;\r\n}(PercentSeries));\r\nexport { PieSeries };\r\n/**\r\n * bboxter 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[\"PieSeries\"] = PieSeries;\r\nregistry.registeredClasses[\"PieSeriesDataItem\"] = PieSeriesDataItem;\r\n//# sourceMappingURL=PieSeries.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { __extends } from \"tslib\";\r\nimport { PieSeries, PieSeriesDataItem } from \"../series/PieSeries\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\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 [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieSeries3DDataItem = /** @class */ (function (_super) {\r\n __extends(PieSeries3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries3DDataItem\";\r\n _this.values.depthValue = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieSeries3DDataItem.prototype, \"depthValue\", {\r\n /**\r\n * @return Depth\r\n */\r\n get: function () {\r\n return this.values[\"depthValue\"].value;\r\n },\r\n /**\r\n * Slice depth (height).\r\n *\r\n * @param value Depth\r\n */\r\n set: function (value) {\r\n this.setValue(\"depthValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieSeries3DDataItem;\r\n}(PieSeriesDataItem));\r\nexport { PieSeries3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar PieSeries3D = /** @class */ (function (_super) {\r\n __extends(PieSeries3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries3D() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries3D\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PieSeries3D.prototype.createDataItem = function () {\r\n return new PieSeries3DDataItem();\r\n };\r\n /**\r\n * creates slice\r\n */\r\n PieSeries3D.prototype.createSlice = function () {\r\n return new Slice3D();\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PieSeries3D.prototype.validateDataElement = function (dataItem) {\r\n var slice = dataItem.slice;\r\n var depth = this.depth;\r\n if (!$type.isNumber(depth)) {\r\n depth = this.chart.depth;\r\n }\r\n var depthPercent = dataItem.values.depthValue.percent;\r\n if (!$type.isNumber(depthPercent)) {\r\n depthPercent = 100;\r\n }\r\n slice.depth = depthPercent * depth / 100;\r\n var angle = this.angle;\r\n if (!$type.isNumber(angle)) {\r\n angle = this.chart.angle;\r\n }\r\n slice.angle = angle;\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieSeries3D.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n for (var i = this._workingStartIndex; i < this._workingEndIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var slice = dataItem.slice;\r\n var startAngle = slice.startAngle;\r\n // find quarter\r\n //q0 || q1\r\n if ((startAngle >= -90 && startAngle < 90)) {\r\n slice.toFront();\r\n }\r\n //q2 || q3\r\n else if ((startAngle >= 90)) {\r\n slice.toBack();\r\n }\r\n }\r\n };\r\n Object.defineProperty(PieSeries3D.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 (height) of the pie slice in pixels.\r\n *\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries3D.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 of the view point of the 3D pie. (0-360)\r\n *\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n PieSeries3D.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n bullet.y = bullet.pixelY - slice.depth;\r\n };\r\n return PieSeries3D;\r\n}(PieSeries));\r\nexport { PieSeries3D };\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[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n//# sourceMappingURL=PieSeries3D.js.map","/**\r\n * Defines Pyramid Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PyramidSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PyramidSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PyramidSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PyramidSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PyramidSeriesDataItem;\r\n}(FunnelSeriesDataItem));\r\nexport { PyramidSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} 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 PyramidSeries = /** @class */ (function (_super) {\r\n __extends(PyramidSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PyramidSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PyramidSeries\";\r\n _this.topWidth = percent(0);\r\n _this.bottomWidth = percent(100);\r\n _this.pyramidHeight = percent(100);\r\n _this.valueIs = \"area\";\r\n _this.sliceLinks.template.width = 0;\r\n _this.sliceLinks.template.height = 0;\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 PyramidSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pyramid Series\");\r\n }\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 PyramidSeries.prototype.createDataItem = function () {\r\n return new PyramidSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PyramidSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this._nextWidth = undefined;\r\n };\r\n /**\r\n * [getNextValue description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @return [description]\r\n */\r\n PyramidSeries.prototype.getNextValue = function (dataItem) {\r\n var index = dataItem.index;\r\n var nextValue = dataItem.getWorkingValue(\"value\");\r\n if (index < this.dataItems.length - 1) {\r\n var nextItem = this.dataItems.getIndex(index + 1);\r\n nextValue = nextItem.getWorkingValue(\"value\");\r\n }\r\n if (nextValue == 0) {\r\n nextValue = 0.000001;\r\n }\r\n return nextValue;\r\n };\r\n /**\r\n * [validateDataElements description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n PyramidSeries.prototype.validateDataElements = function () {\r\n var _this = this;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n this.dataItems.each(function (dataItem) {\r\n if (dataItem.value > 0) {\r\n var relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n var sliceLink = dataItem.sliceLink;\r\n if (_this.orientation == \"vertical\") {\r\n maxHeight -= (sliceLink.pixelHeight * relValue);\r\n }\r\n else {\r\n maxWidth -= (sliceLink.pixelWidth * relValue);\r\n }\r\n }\r\n });\r\n this._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n this._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n if (this.orientation == \"vertical\") {\r\n var y = (maxHeight - this._pyramidHeight) / 2;\r\n this.slicesContainer.y = y;\r\n this.labelsContainer.y = y;\r\n this.ticksContainer.y = y;\r\n }\r\n else {\r\n var x = (maxWidth - this._pyramidWidth) / 2;\r\n this.slicesContainer.x = x;\r\n this.labelsContainer.x = x;\r\n this.ticksContainer.x = x;\r\n }\r\n _super.prototype.validateDataElements.call(this);\r\n };\r\n /**\r\n * [decorateSlice description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n PyramidSeries.prototype.decorateSlice = function (dataItem) {\r\n var sum = this.dataItem.values.value.absoluteSum;\r\n if (sum == 0) {\r\n return;\r\n }\r\n var slice = dataItem.slice;\r\n var sliceLink = dataItem.sliceLink;\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n // TODO can this be removed ?\r\n this.getNextValue(dataItem);\r\n var workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n var pyramidWidth = this._pyramidWidth;\r\n var pyramidHeight = this._pyramidHeight;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n var linkWidth = sliceLink.pixelWidth;\r\n var linkHeight = sliceLink.pixelHeight;\r\n if ((dataItem.value == 0 || dataItem.value == null) && this.ignoreZeroValues) {\r\n dataItem.__disabled = true;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n if (this.orientation == \"vertical\") {\r\n var topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n if (!$type.isNumber(this._nextWidth)) {\r\n this._nextWidth = topWidth;\r\n }\r\n var bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n var sliceTopWidth = this._nextWidth;\r\n var angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n var c = Math.tan(Math.PI / 2 - angle);\r\n if (c == 0) {\r\n c = 0.00000001;\r\n }\r\n var sliceHeight = void 0;\r\n var sliceBottomWidth = void 0;\r\n if (this.valueIs == \"area\") {\r\n var totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n var square = totalSquare * workingValue / sum;\r\n var s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n sliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n if (sliceHeight > 0) {\r\n sliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n }\r\n else {\r\n sliceBottomWidth = sliceTopWidth;\r\n }\r\n }\r\n else {\r\n sliceHeight = pyramidHeight * workingValue / sum;\r\n sliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n }\r\n slice.height = sliceHeight;\r\n slice.width = maxWidth;\r\n slice.bottomWidth = sliceBottomWidth;\r\n slice.topWidth = sliceTopWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = slice.bottomWidth;\r\n slice.y = this._nextY;\r\n //slice.x = maxWidth / 2;\r\n if (!this.alignLabels) {\r\n label.x = maxWidth / 2;\r\n }\r\n else {\r\n label.x = 0;\r\n }\r\n label.y = slice.pixelY + slice.pixelHeight * tick.locationY + slice.dy;\r\n this._nextY += slice.pixelHeight + linkHeight * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n sliceLink.y = this._nextY - linkHeight;\r\n sliceLink.x = maxWidth / 2;\r\n }\r\n else {\r\n var topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n if (!$type.isNumber(this._nextWidth)) {\r\n this._nextWidth = topWidth;\r\n }\r\n var bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n var sliceTopWidth = this._nextWidth;\r\n var angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n var c = Math.tan(Math.PI / 2 - angle);\r\n if (c == 0) {\r\n c = 0.00000001;\r\n }\r\n var sliceWidth = void 0;\r\n var sliceBottomWidth = void 0;\r\n if (this.valueIs == \"area\") {\r\n var totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n var square = totalSquare * workingValue / sum;\r\n sliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n sliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n }\r\n else {\r\n sliceWidth = pyramidWidth * workingValue / sum;\r\n sliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n }\r\n slice.width = sliceWidth;\r\n slice.height = maxHeight;\r\n slice.bottomWidth = sliceBottomWidth;\r\n slice.topWidth = sliceTopWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = slice.bottomWidth;\r\n slice.x = this._nextY;\r\n if (!this.alignLabels) {\r\n label.y = maxHeight / 2;\r\n }\r\n else {\r\n label.y = this.labelsContainer.measuredHeight;\r\n }\r\n label.x = slice.pixelX + slice.pixelWidth * tick.locationX + slice.dx;\r\n this._nextY += slice.pixelWidth + linkWidth * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n sliceLink.x = this._nextY - linkWidth;\r\n sliceLink.y = maxHeight / 2;\r\n }\r\n this._nextWidth = slice.bottomWidth;\r\n };\r\n Object.defineProperty(PyramidSeries.prototype, \"topWidth\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"topWidth\");\r\n },\r\n /**\r\n * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n *\r\n * `0%` (default) means the pyramid will be perfectly pointy.\r\n * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n * `100%` will take the whole width of the chart.\r\n *\r\n * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n * `100%` and `bottomWidth` to `0%`.\r\n *\r\n * @default 0%\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"pyramidHeight\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pyramidHeight\");\r\n },\r\n /**\r\n * Height of pyramid\r\n *\r\n *\r\n * @default 100%\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"bottomWidth\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomWidth\");\r\n },\r\n /**\r\n * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n *\r\n * `0%` means the pyramid's botto will be pointy.\r\n * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n * `100%` (default) will take the whole width of the chart.\r\n *\r\n * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n * `100%` and `bottomWidth` to `0%`.\r\n *\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"valueIs\", {\r\n /**\r\n * @return {\"area\" | \"height\"}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"valueIs\");\r\n },\r\n /**\r\n * Indicates how slice's value will influence its size.\r\n *\r\n * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n * slices based on their value.\r\n *\r\n * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n * will represent their value relatively to values of the other slices.\r\n *\r\n * This is a correct way to depict \"weight\" of each slice based on their\r\n * values.\r\n *\r\n * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n * divvied up between slices. Actual slice width or area is not counted in.\r\n *\r\n * From the data-viz standpoint this does not make a lot of sense, since\r\n * slices with lesser values might appear more prominent if they are placed\r\n * towards thick end of the pyramid since their areas will be bigger.\r\n *\r\n * @default \"area\"\r\n * @param {\"area\" | \"height\"}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"valueIs\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PyramidSeries;\r\n}(FunnelSeries));\r\nexport { PyramidSeries };\r\n/**\r\n * bboxter 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[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n//# sourceMappingURL=PyramidSeries.js.map","/**\r\n * Radar column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\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 [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(RadarColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarColumnSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { RadarColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar RadarColumnSeries = /** @class */ (function (_super) {\r\n __extends(RadarColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarColumnSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates and returns a RadarColumn element to use as column in radar chart.\r\n *\r\n * @return RadarColumn.\r\n */\r\n RadarColumnSeries.prototype.createColumnTemplate = function () {\r\n return new RadarColumn();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarColumnSeries.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n RadarColumnSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n if (dataItem) {\r\n if (dataItem.column) {\r\n dataItem.column.__disabled = true;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n rangeColumn.__disabled = true;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n RadarColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n var _this = this;\r\n var startAngle = this.chart.startAngle;\r\n var endAngle = this.chart.endAngle;\r\n var yField = this.yField;\r\n var yOpenField = this.yOpenField;\r\n var xField = this.xField;\r\n var xOpenField = this.xOpenField;\r\n var lAngle;\r\n var rAngle;\r\n var tRadius;\r\n var bRadius;\r\n var startLocation = this.getStartLocation(dataItem);\r\n var endLocation = this.getEndLocation(dataItem);\r\n var cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n var radarColumn = dataItem.column;\r\n if (!radarColumn) {\r\n radarColumn = this.columns.create();\r\n dataItem.column = radarColumn;\r\n $object.copyProperties(this, radarColumn, visualProperties); // need this \r\n $object.copyProperties(this.columns.template, radarColumn, visualProperties); // second time, no force, so that columns.template would override series properties\t\t\t\r\n dataItem.addSprite(radarColumn);\r\n radarColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n this.setColumnStates(radarColumn);\r\n }\r\n var width = radarColumn.width;\r\n var percentWidth = 100;\r\n if (width instanceof Percent) {\r\n percentWidth = width.percent;\r\n }\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n // two category axes\r\n if ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, 0, \"valueY\"), y: this.yAxis.getY(dataItem, yField, 0, \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, 1, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, 1, \"valueY\") });\r\n lAngle = this.xAxis.getAngle(dataItem, xOpenField, 0, \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xField, 1, \"valueX\");\r\n startAngle = startAngle + startLocation * cellAngle;\r\n endAngle = endAngle - (1 - endLocation) * cellAngle;\r\n }\r\n else if (this.baseAxis == this.xAxis) {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n lAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n startAngle = startAngle + startLocation * cellAngle;\r\n endAngle = endAngle - (1 - endLocation) * cellAngle;\r\n }\r\n else {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n if ($type.isNumber(width)) {\r\n var abs = Math.abs(tRadius - bRadius);\r\n if (abs > width) {\r\n var d = (abs - width) / 2;\r\n tRadius += d;\r\n bRadius -= d;\r\n }\r\n }\r\n lAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n }\r\n if (rAngle < lAngle) {\r\n var temp = rAngle;\r\n rAngle = lAngle;\r\n lAngle = temp;\r\n }\r\n lAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n rAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n var slice = radarColumn.radarColumn;\r\n slice.startAngle = lAngle;\r\n var arc = rAngle - lAngle;\r\n if (arc > 0) {\r\n slice.arc = arc;\r\n slice.radius = tRadius;\r\n slice.innerRadius = bRadius;\r\n radarColumn.__disabled = false;\r\n radarColumn.parent = this.columnsContainer;\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (!rangeColumn) {\r\n rangeColumn = _this.columns.create();\r\n $object.forceCopyProperties(_this.columns.template, rangeColumn, visualProperties);\r\n $object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n if (rangeColumn.dataItem) {\r\n $array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n }\r\n dataItem.addSprite(rangeColumn);\r\n rangeColumn.paper = _this.paper; // sometimes pattern is not drawn if is set with adapter without this.\t\t\t\t\t\r\n _this.setColumnStates(rangeColumn);\r\n dataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n }\r\n var slice = rangeColumn.radarColumn;\r\n slice.startAngle = lAngle;\r\n slice.arc = arc;\r\n slice.radius = tRadius;\r\n slice.innerRadius = bRadius;\r\n if (slice.invalid) {\r\n slice.paper = _this.paper;\r\n slice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n rangeColumn.__disabled = false;\r\n rangeColumn.parent = axisRange.contents;\r\n });\r\n }\r\n else {\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n RadarColumnSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (!stackKeyX) {\r\n stackKeyX = \"valueX\";\r\n }\r\n if (!stackKeyY) {\r\n stackKeyY = \"valueY\";\r\n }\r\n var x = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n var radius = $math.getDistance({ x: x, y: y });\r\n // hack to be able to determine angle later\r\n if (radius == 0) {\r\n radius = 0.00001;\r\n }\r\n var angle = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n return { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n };\r\n /**\r\n * Returns an SVG path to be used as a mask for the series.\r\n *\r\n * @return SVG path\r\n */\r\n RadarColumnSeries.prototype.getMaskPath = function () {\r\n var renderer = this.yAxis.renderer;\r\n return $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n };\r\n RadarColumnSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end) {\r\n bullet.visible = false;\r\n }\r\n bullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\r\n };\r\n RadarColumnSeries.prototype.setXAxis = function (axis) {\r\n _super.prototype.setXAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarColumnSeries.prototype.setYAxis = function (axis) {\r\n _super.prototype.setYAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarColumnSeries.prototype.updateRendererRefs = function () {\r\n var rendererX = this.xAxis.renderer;\r\n var rendererY = this.yAxis.renderer;\r\n rendererX.axisRendererY = rendererY;\r\n };\r\n return RadarColumnSeries;\r\n}(ColumnSeries));\r\nexport { RadarColumnSeries };\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[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n//# sourceMappingURL=RadarColumnSeries.js.map","/**\r\n * Radar series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem } from \"./LineSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n//import { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\n//import { Sprite } from \"../../core/Sprite\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(RadarSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarSeriesDataItem\";\r\n _this.setLocation(\"dateX\", 0, 0);\r\n _this.setLocation(\"dateY\", 0, 0);\r\n _this.setLocation(\"categoryX\", 0, 0);\r\n _this.setLocation(\"categoryY\", 0, 0);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarSeriesDataItem;\r\n}(LineSeriesDataItem));\r\nexport { RadarSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar RadarSeries = /** @class */ (function (_super) {\r\n __extends(RadarSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarSeries\";\r\n _this.connectEnds = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarSeries.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\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 RadarSeries.prototype.createDataItem = function () {\r\n return new RadarSeriesDataItem();\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n RadarSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (!stackKeyX) {\r\n stackKeyX = \"valueX\";\r\n }\r\n if (!stackKeyY) {\r\n stackKeyY = \"valueY\";\r\n }\r\n var x = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n var radius = $math.getDistance({ x: x, y: y });\r\n // hack to be able to determine angle later\r\n if (radius == 0) {\r\n radius = 0.00001;\r\n }\r\n var angle = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n var startAngle = this.chart.startAngle;\r\n var endAngle = this.chart.endAngle;\r\n //\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n if (angle < startAngle || angle > endAngle) {\r\n return undefined;\r\n }\r\n else {\r\n return { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n }\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n RadarSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n if (point) {\r\n points.push(point);\r\n }\r\n };\r\n /**\r\n * Returns an SVG path to be used as a mask for the series.\r\n *\r\n * @return SVG path\r\n */\r\n RadarSeries.prototype.getMaskPath = function () {\r\n var renderer = this.yAxis.renderer;\r\n return $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n };\r\n /**\r\n * [drawSegment description]\r\n *\r\n * @todo Description\r\n * @param segment [description]\r\n * @param points [description]\r\n * @param closePoints [description]\r\n */\r\n RadarSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n var axis = this.yAxis;\r\n var renderer = axis.renderer;\r\n if (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n // adds one point to the beginning of closePoints array, if needed\r\n if (this.dataFields[this._xOpenField] ||\r\n this.dataFields[this._yOpenField] ||\r\n this.stacked) {\r\n points.push(points[0]);\r\n if (closePoints.length > 0) {\r\n closePoints.unshift(closePoints[closePoints.length - 1]);\r\n }\r\n }\r\n }\r\n _super.prototype.drawSegment.call(this, segment, points, closePoints);\r\n };\r\n Object.defineProperty(RadarSeries.prototype, \"connectEnds\", {\r\n /**\r\n * @return Connect?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"connectEnds\");\r\n },\r\n /**\r\n * Should the last and and first data points be connected, forming a complete\r\n * closed circle?\r\n *\r\n * @default true\r\n * @param value Connect?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"connectEnds\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n RadarSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end) {\r\n bullet.visible = false;\r\n }\r\n bullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\r\n };\r\n RadarSeries.prototype.setXAxis = function (axis) {\r\n _super.prototype.setXAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarSeries.prototype.setYAxis = function (axis) {\r\n _super.prototype.setYAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarSeries.prototype.updateRendererRefs = function () {\r\n var rendererX = this.xAxis.renderer;\r\n var rendererY = this.yAxis.renderer;\r\n rendererX.axisRendererY = rendererY;\r\n };\r\n return RadarSeries;\r\n}(LineSeries));\r\nexport { RadarSeries };\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[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n//# sourceMappingURL=RadarSeries.js.map","/**\r\n * Functionality for any series-based elements, like Line Series (graphs),\r\n * Pie slice lists, etc.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component } from \"../../core/Component\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { List, ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { LegendSettings } from \"../Legend\";\r\nimport { options } from \"../../core/Options\";\r\nimport { Color } from \"../../core/utils/Color\";\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 $ease from \"../../core/utils/Ease\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $colors from \"../../core/utils/Colors\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[Series]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SeriesDataItem = /** @class */ (function (_super) {\r\n __extends(SeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SeriesDataItem\";\r\n //@todo Should we make `bullets` list disposable?\r\n //this._disposers.push(new DictionaryDisposer(this.bullets));\r\n _this.values.value = {};\r\n _this.values.value = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(SeriesDataItem.prototype, \"bullets\", {\r\n /**\r\n * A dictionary of data items bullets, where key is uid of a bullet template.\r\n */\r\n get: function () {\r\n if (!this._bullets) {\r\n this._bullets = new Dictionary();\r\n this._disposers.push(new DictionaryDisposer(this._bullets));\r\n }\r\n return this._bullets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Destroys this object and all related data.\r\n */\r\n SeriesDataItem.prototype.dispose = function () {\r\n this.bullets.clear();\r\n _super.prototype.dispose.call(this);\r\n };\r\n Object.defineProperty(SeriesDataItem.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 * data items's numeric 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 return SeriesDataItem;\r\n}(DataItem));\r\nexport { SeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines base class for any kind of serial data.\r\n *\r\n * @see {@link ISeriesEvents} for a list of available Events\r\n * @see {@link ISeriesAdapters} for a list of available Adapters\r\n * @todo Separate axis-related stuff to some other class so that MapSeries would not have unrelated stuff\r\n */\r\nvar Series = /** @class */ (function (_super) {\r\n __extends(Series, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Series() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Should this series excluded from the axis scale calculations?\r\n *\r\n * @default false\r\n */\r\n _this._ignoreMinMax = false;\r\n /**\r\n * Should series' bullets?\r\n *\r\n * @default true\r\n */\r\n _this._showBullets = true;\r\n /**\r\n * Settings for the appearance of the related legend items.\r\n */\r\n _this.legendSettings = new LegendSettings();\r\n /**\r\n * Lowest overal values by type.\r\n */\r\n _this._tmin = new Dictionary();\r\n /**\r\n * Highest overal values by type.\r\n */\r\n _this._tmax = new Dictionary();\r\n /**\r\n * Lowest values in current selection by type.\r\n */\r\n _this._smin = new Dictionary();\r\n /**\r\n * Highest values in current selection by type.\r\n */\r\n _this._smax = new Dictionary();\r\n /**\r\n * [dataItemsByAxis description]\r\n *\r\n * Both by category and date.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n _this.dataItemsByAxis = new Dictionary();\r\n /**\r\n * Normally series items are focusable using keyboard, so that people can\r\n * select them with a TAB key. However, if there are a lot of data points on\r\n * screen it might be long and useless to tab through all o fthem.\r\n *\r\n * This is where `skipFocusThreshold` comes in. If there are more items than\r\n * the value set here, we will not make those focusable and rather let screen\r\n * reader software rely on the series summary, or authors provide alternative\r\n * detailed information display, such as HTML table.\r\n *\r\n * Different series might have different threshold defaults.\r\n */\r\n _this.skipFocusThreshold = 20;\r\n /**\r\n * Used to indicate if `itemReaderText` was changed \"from the outside\".\r\n */\r\n _this._itemReaderTextChanged = false;\r\n /**\r\n * Most of the series use absolute values. However sometimes various\r\n * calculated percent values are need, e.g. item's percent representation\r\n * across all values in series, etc.\r\n *\r\n * It's a resource-intensive operation, so it is disabled by default.\r\n *\r\n * If you need percents to be calculated, e.g. for showing them in tooltips,\r\n * or creating 100% stacks, this setting needs to be set to `true`.\r\n *\r\n * NOTE: `PieChart`, which relies on slice percentages, has this\r\n * automatically set to `true`.\r\n *\r\n * @default false\r\n */\r\n _this.calculatePercent = false;\r\n /**\r\n * When `calculatePercent` is enabled and data item's percent value is\r\n * calculated, last item's real value is used instead of its working value.\r\n *\r\n * This is done for the animations when last item in series (e.g. slice in\r\n * a `PieSeries`) is hidden or shown. (if we would use real value, the\r\n * calculated percent would always be 100%).\r\n *\r\n * Sometimes there is a need (e.g. for drill-down Sunburst) to disable this\r\n * hack by setting `usePercentHack` to `false`.\r\n *\r\n * @since 4.9.13\r\n * @default true\r\n */\r\n _this.usePercentHack = true;\r\n /**\r\n * Specifies if series should be automatically disposed when removing from\r\n * chart's `series` list.\r\n *\r\n * @default true\r\n */\r\n _this.autoDispose = true;\r\n /**\r\n * When chart/series' data is processed, all kinds of derivative values are\r\n * calculated. E.g. sum, min, max, change, etc. This is a potentially\r\n * time-consuming operation, especially prominent in data-heavy charts.\r\n *\r\n * If your chart does not need those values, and you have a lot of data,\r\n * setting this to `true` might give a dramatic increase in initial chart\r\n * load speed.\r\n *\r\n * Please note, regular column and line series usage scenarios do not\r\n * require derivative values. Those come into play only when you do advanced\r\n * functionality like coloring segments of charts in different colors\r\n * depending on change between open and close values, have stacked series, or\r\n * display any of the derived values, like percent, in tooltips or bullets.\r\n *\r\n * @default false\r\n */\r\n _this.simplifiedProcessing = false;\r\n if (_this.constructor === Series) {\r\n throw new Error(\"'Series' cannot be instantiated directly. Please use a specific series type.\");\r\n }\r\n _this.className = \"Series\";\r\n _this.isMeasured = false;\r\n _this.layout = \"none\";\r\n _this.shouldClone = false;\r\n _this.setPropertyValue(\"hidden\", false);\r\n _this.axisRanges = new List();\r\n _this.axisRanges.events.on(\"inserted\", _this.processAxisRange, _this, false);\r\n _this.minBulletDistance = 0; // otherwise we'll have a lot of cases when people won't see bullets and think it's a bug\r\n _this.mainContainer = _this.createChild(Container);\r\n _this.mainContainer.shouldClone = false;\r\n _this.mainContainer.mask = _this.createChild(Sprite);\r\n _this._disposers.push(_this.mainContainer);\r\n // all bullets should go on top of lines/fills. So we add a separate container for bullets and later set it's parent to chart.bulletsContainer\r\n var bulletsContainer = _this.mainContainer.createChild(Container);\r\n _this._shouldBeReady.push(bulletsContainer);\r\n bulletsContainer.shouldClone = false;\r\n bulletsContainer.layout = \"none\";\r\n bulletsContainer.virtualParent = _this;\r\n _this._disposers.push(bulletsContainer);\r\n _this.bulletsContainer = bulletsContainer;\r\n _this.tooltip = new Tooltip();\r\n _this.tooltip.virtualParent = _this;\r\n _this._disposers.push(_this.tooltip);\r\n _this.hiddenState.transitionEasing = $ease.cubicIn;\r\n // this data item holds sums, averages, etc\r\n _this.dataItem = _this.createDataItem();\r\n _this._disposers.push(_this.dataItem);\r\n _this.dataItem.component = _this;\r\n // Apply accessibility\r\n _this.role = \"group\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * We need this here so that class names can be applied to bullets container.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.applyTheme = function () {\r\n _super.prototype.applyTheme.call(this);\r\n if (options.autoSetClassName && this.bulletsContainer) {\r\n this.bulletsContainer.className = this.className + \"-bullets\";\r\n this.bulletsContainer.setClassName();\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 Series.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Series\");\r\n }\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 Series.prototype.createDataItem = function () {\r\n return new SeriesDataItem();\r\n };\r\n Object.defineProperty(Series.prototype, \"chart\", {\r\n /**\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart;\r\n },\r\n /**\r\n * Chart series is used on.\r\n *\r\n * @param value Chart\r\n */\r\n set: function (value) {\r\n this._chart = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Positions bullet.\r\n *\r\n * @param bullet Sprite\r\n */\r\n Series.prototype.positionBullet = function (bullet) {\r\n // Placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Decorates newly created bullet after it has been instert into the list.\r\n *\r\n * @param event List event\r\n * @todo investigate why itemReaderText is undefined\r\n */\r\n Series.prototype.processBullet = function (event) {\r\n var _this = this;\r\n var bullet = event.newValue;\r\n bullet.isTemplate = true;\r\n // Add accessibility options to bullet\r\n // If there are relatively few bullets, make them focusable\r\n this.events.once(\"datavalidated\", function (ev) {\r\n if (_this.itemsFocusable()) {\r\n bullet.focusable = true;\r\n }\r\n });\r\n this.invalidate();\r\n };\r\n /**\r\n * removes bullets\r\n *\r\n * @param event List event\r\n */\r\n Series.prototype.removeBullet = function (event) {\r\n var bullet = event.oldValue;\r\n this.dataItems.each(function (dataItem) {\r\n var eachBullet = dataItem.bullets.getKey(bullet.uid);\r\n if (eachBullet) {\r\n eachBullet.dispose();\r\n }\r\n });\r\n this.invalidate();\r\n };\r\n /**\r\n * Validates data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.processValues(false);\r\n };\r\n /**\r\n * Returns first value for the specific key in the series.\r\n *\r\n * @param key Key\r\n * @return Value\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n */\r\n Series.prototype.getFirstValue = function (key, startIndex) {\r\n // find first\r\n /*\r\n return $iter.findMap(this.dataItems.iterator(), (dataItem) => {\r\n for (let key in dataItem.values) {\r\n if ($object.hasKey(dataItem.values, key)) {\r\n let value: number = dataItem.values[key].workingValue;\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n });*/\r\n //if (startIndex > 0 && startIndex < this.dataItems.length - 1) {\r\n //startIndex++;\r\n //}\r\n for (var i = startIndex; i >= 0; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var value = dataItem.getActualWorkingValue(key);\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Returns first value for the specific key in the series.\r\n *\r\n * @param key Key\r\n * @return Value\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n */\r\n Series.prototype.getAbsoluteFirstValue = function (key) {\r\n for (var i = 0; i < this.dataItems.length; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var value = dataItem.values[key].value;\r\n if ($type.isNumber(value)) {\r\n return value;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * [rangeChangeUpdate description]\r\n *\r\n * @todo Description\r\n */\r\n Series.prototype.rangeChangeUpdate = function () {\r\n _super.prototype.rangeChangeUpdate.call(this);\r\n this.processValues(true);\r\n };\r\n /**\r\n * [processValues description]\r\n *\r\n * @todo Description\r\n * @todo Convert to propert object property iterator\r\n * @param dataItems [description]\r\n */\r\n Series.prototype.processValues = function (working) {\r\n var _this = this;\r\n if (!this.simplifiedProcessing) {\r\n var dataItems = this.dataItems;\r\n var count_1 = {};\r\n var sum_1 = {};\r\n var absoluteSum_1 = {};\r\n var low_1 = {};\r\n var high_1 = {};\r\n var open_1 = {};\r\n var close_1 = {};\r\n var previous_1 = {};\r\n var first_1 = {};\r\n var absoluteFirst_1 = {};\r\n //let duration: number = 0; // todo: check if series uses selection.change or selection.change.percent and set duration to interpolationduration\r\n var startIndex_1 = $math.max(0, this.startIndex);\r\n startIndex_1 = $math.min(startIndex_1, this.dataItems.length);\r\n var endIndex = $math.min(this.endIndex, this.dataItems.length);\r\n if (!$type.isNumber(startIndex_1)) {\r\n startIndex_1 = 0;\r\n }\r\n if (!$type.isNumber(endIndex)) {\r\n endIndex = this.dataItems.length;\r\n }\r\n if (startIndex_1 > 0) {\r\n var dataItem_1 = dataItems.getIndex(startIndex_1 - 1);\r\n $object.each(dataItem_1.values, function (key, values) {\r\n var value = dataItem_1.getActualWorkingValue(key);\r\n if ($type.isNumber(value)) {\r\n // save previous\r\n previous_1[key] = value;\r\n }\r\n });\r\n }\r\n var _loop_1 = function (i) {\r\n var dataItem_2 = dataItems.getIndex(i);\r\n $object.each(dataItem_2.values, function (key, values) {\r\n var value = dataItem_2.getActualWorkingValue(key);\r\n //if (i >= startIndex && i <= endIndex) { // do not add to count, sum etc if it is not within start/end index\r\n if ($type.isNumber(value)) {\r\n // count values\r\n if (!$type.isNumber(count_1[key])) {\r\n count_1[key] = 0;\r\n }\r\n count_1[key]++;\r\n // sum values\r\n if (!$type.isNumber(sum_1[key])) {\r\n sum_1[key] = 0;\r\n }\r\n sum_1[key] += value;\r\n // absolute sum values\r\n if (!$type.isNumber(absoluteSum_1[key])) {\r\n absoluteSum_1[key] = 0;\r\n }\r\n absoluteSum_1[key] += Math.abs(value);\r\n // open\r\n if (!$type.isNumber(open_1[key])) {\r\n open_1[key] = value;\r\n }\r\n // close\r\n close_1[key] = value;\r\n // low\r\n if (!$type.isNumber(low_1[key])) {\r\n low_1[key] = value;\r\n }\r\n else {\r\n if (low_1[key] > value) {\r\n low_1[key] = value;\r\n }\r\n }\r\n // high\r\n if (!$type.isNumber(high_1[key])) {\r\n high_1[key] = value;\r\n }\r\n else {\r\n if (high_1[key] < value) {\r\n high_1[key] = value;\r\n }\r\n }\r\n if (!$type.isNumber(first_1[key])) {\r\n first_1[key] = _this.getFirstValue(key, startIndex_1);\r\n }\r\n if (!$type.isNumber(absoluteFirst_1[key])) {\r\n absoluteFirst_1[key] = _this.getAbsoluteFirstValue(key);\r\n }\r\n // change\r\n dataItem_2.setCalculatedValue(key, value - first_1[key], \"change\");\r\n // change from start percent\r\n // will fail if first value is 0\r\n dataItem_2.setCalculatedValue(key, (value - first_1[key]) / first_1[key] * 100, \"changePercent\");\r\n dataItem_2.setCalculatedValue(key, (value - absoluteFirst_1[key]), \"startChange\");\r\n dataItem_2.setCalculatedValue(key, (value - absoluteFirst_1[key]) / absoluteFirst_1[key] * 100, \"startChangePercent\");\r\n // previous change\r\n var prevValue = previous_1[key];\r\n if (!$type.isNumber(prevValue)) {\r\n prevValue = value;\r\n }\r\n dataItem_2.setCalculatedValue(key, value - prevValue, \"previousChange\");\r\n // previous change percent\r\n dataItem_2.setCalculatedValue(key, (value - prevValue) / prevValue * 100, \"previousChangePercent\");\r\n // save previous\r\n previous_1[key] = value;\r\n }\r\n });\r\n };\r\n for (var i = startIndex_1; i < endIndex; i++) {\r\n _loop_1(i);\r\n }\r\n if (this.calculatePercent) {\r\n var _loop_2 = function (i) {\r\n var dataItem_3 = dataItems.getIndex(i);\r\n $object.each(dataItem_3.values, function (key) {\r\n var ksum = absoluteSum_1[key];\r\n var value = dataItem_3.getActualWorkingValue(key);\r\n if ($type.isNumber(value)) {\r\n if (ksum > 0) {\r\n if (_this.usePercentHack) {\r\n // this hack is made in order to make it possible to animate single slice to 0\r\n // if there is only one slice left, percent value is always 100%, so it won't animate\r\n // so we use real value of a slice instead of current value\r\n if (value == ksum) {\r\n ksum = dataItem_3.values[key].value;\r\n }\r\n }\r\n var percent = value / ksum * 100;\r\n dataItem_3.setCalculatedValue(key, percent, \"percent\");\r\n }\r\n else {\r\n dataItem_3.setCalculatedValue(key, 0, \"percent\");\r\n }\r\n }\r\n });\r\n };\r\n for (var i = startIndex_1; i < endIndex; i++) {\r\n _loop_2(i);\r\n }\r\n }\r\n // calculate one before first (cant do that in cycle, as we don't know open yet\r\n // when drawing line chart we should draw line to the invisible data point to the left, otherwise the line will always look like it starts from the selected point\r\n // so we do startIndex - 1\r\n if (startIndex_1 > 0) {\r\n var zeroItem_1 = dataItems.getIndex(startIndex_1 - 1);\r\n $object.each(zeroItem_1.values, function (key) {\r\n var value = zeroItem_1.values[key].value;\r\n // change\r\n zeroItem_1.setCalculatedValue(key, value - open_1[key], \"change\");\r\n // change percent\r\n zeroItem_1.setCalculatedValue(key, (value - open_1[key]) / open_1[key] * 100, \"changePercent\");\r\n });\r\n }\r\n // we save various data like sum, average to dataPoint of the series\r\n var dataItem_4 = this.dataItem;\r\n $object.each(dataItem_4.values, function (key) {\r\n dataItem_4.setCalculatedValue(key, sum_1[key], \"sum\");\r\n dataItem_4.setCalculatedValue(key, absoluteSum_1[key], \"absoluteSum\");\r\n dataItem_4.setCalculatedValue(key, sum_1[key] / count_1[key], \"average\");\r\n dataItem_4.setCalculatedValue(key, open_1[key], \"open\");\r\n dataItem_4.setCalculatedValue(key, close_1[key], \"close\");\r\n dataItem_4.setCalculatedValue(key, low_1[key], \"low\");\r\n dataItem_4.setCalculatedValue(key, high_1[key], \"high\");\r\n dataItem_4.setCalculatedValue(key, count_1[key], \"count\");\r\n });\r\n }\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.validate = function () {\r\n if ($utils.isIE()) {\r\n this.filters.clear();\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n //axisRange.contents.disposeChildren(); // not good for columns, as they are reused\r\n //\t\t\taxisRange.appendChildren();\r\n axisRange.validate();\r\n });\r\n _super.prototype.validate.call(this);\r\n var bulletsContainer = this.bulletsContainer;\r\n bulletsContainer.fill = this.fill;\r\n bulletsContainer.stroke = this.stroke;\r\n bulletsContainer.x = this.pixelX;\r\n bulletsContainer.y = this.pixelY;\r\n if (this.bulletsContainer.children.length > 0) {\r\n if (this._showBullets) {\r\n for (var i = 0; i < this.startIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.__disabled = true;\r\n });\r\n }\r\n }\r\n for (var i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.__disabled = true;\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n this.bulletsContainer.children.each(function (bullet) {\r\n bullet.__disabled = true;\r\n });\r\n }\r\n }\r\n this.updateTooltipBounds();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Series.prototype.updateTooltipBounds = function () {\r\n if (this.topParent) {\r\n var x = 0;\r\n var y = 0;\r\n var w = this.topParent.maxWidth;\r\n var h = this.topParent.maxHeight;\r\n var rect = { x: x, y: y, width: w, height: h };\r\n this.tooltip.setBounds(rect);\r\n }\r\n };\r\n Series.prototype.shouldCreateBullet = function (dataItem, bulletTemplate) {\r\n return true;\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n Series.prototype.validateDataElement = function (dataItem) {\r\n var _this = this;\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n if (this._showBullets) {\r\n if (!this.isHidden) {\r\n this.bulletsContainer.visible = true;\r\n }\r\n this.bullets.each(function (bulletTemplate) {\r\n // always better to use the same, this helps to avoid redrawing\r\n var bullet = dataItem.bullets.getKey(bulletTemplate.uid);\r\n if (_this.shouldCreateBullet(dataItem, bulletTemplate)) {\r\n if (!bullet) {\r\n var disabledField = bulletTemplate.propertyFields.disabled;\r\n var dataContext = dataItem.dataContext;\r\n if (disabledField && dataContext && dataContext[disabledField] === false) {\r\n bulletTemplate.applyOnClones = false;\r\n bulletTemplate.disabled = false;\r\n bullet = bulletTemplate.clone();\r\n bulletTemplate.disabled = true;\r\n bulletTemplate.applyOnClones = true;\r\n }\r\n else {\r\n bullet = bulletTemplate.clone();\r\n }\r\n bullet.shouldClone = false;\r\n dataItem.addSprite(bullet);\r\n if (!_this.visible || _this.isHiding) {\r\n bullet.hide(0);\r\n }\r\n }\r\n var currentDataItem = bullet.dataItem;\r\n if (currentDataItem != dataItem) {\r\n // set to undefined in order not to reuse\r\n if (currentDataItem) {\r\n currentDataItem.bullets.setKey(bulletTemplate.uid, undefined);\r\n }\r\n var readerText_1 = _this.itemReaderText;\r\n if (bullet instanceof Bullet) {\r\n if (!readerText_1) {\r\n readerText_1 = (\"{\" + bullet.xField + \"}: {\" + bullet.yField + \"}\");\r\n }\r\n if (bullet.isDynamic) {\r\n dataItem.events.on(\"workingvaluechanged\", bullet.deepInvalidate, bullet, false);\r\n //dataItem.events.on(\"calculatedvaluechanged\", bullet.deepInvalidate, bullet, false);\r\n _this.dataItem.events.on(\"workingvaluechanged\", bullet.deepInvalidate, bullet, false);\r\n }\r\n bullet.deepInvalidate();\r\n }\r\n // Add accessibility to bullet\r\n if (bullet.focusable) {\r\n bullet.events.on(\"focus\", function (ev) {\r\n bullet.readerTitle = _this.populateString(readerText_1, bullet.dataItem);\r\n }, undefined, false);\r\n bullet.events.on(\"blur\", function (ev) {\r\n bullet.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n if (bullet.hoverable) {\r\n bullet.events.on(\"over\", function (ev) {\r\n bullet.readerTitle = _this.populateString(readerText_1, bullet.dataItem);\r\n }, undefined, false);\r\n bullet.events.on(\"out\", function (ev) {\r\n bullet.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n }\r\n bullet.parent = _this.bulletsContainer;\r\n dataItem.bullets.setKey(bulletTemplate.uid, bullet);\r\n // pass max w/h so we'd know if we should show/hide somethings\r\n bullet.maxWidth = dataItem.itemWidth;\r\n bullet.maxHeight = dataItem.itemHeight;\r\n bullet.__disabled = false;\r\n _this.positionBullet(bullet);\r\n }\r\n else {\r\n if (bullet) {\r\n bullet.__disabled = true;\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n this.bulletsContainer.visible = false;\r\n }\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n if (!this.dataRangeInvalid) {\r\n this.invalidateProcessedData();\r\n }\r\n };\r\n Object.defineProperty(Series.prototype, \"ignoreMinMax\", {\r\n /**\r\n * @return Exclude from calculations?\r\n */\r\n get: function () {\r\n return this._ignoreMinMax;\r\n },\r\n /**\r\n * Should this series excluded from the axis scale calculations?\r\n *\r\n * @default false\r\n * @param value Exclude from calculations?\r\n */\r\n set: function (value) {\r\n this._ignoreMinMax = value;\r\n this.invalidateDataItems();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Create a mask for the series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.createMask = function () {\r\n // A placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Process axis range after it has been added to the list.\r\n *\r\n * @param event Event\r\n */\r\n Series.prototype.processAxisRange = function (event) {\r\n // create container if not existing\r\n if (!this.rangesContainer) {\r\n this.rangesContainer = this.createChild(Container);\r\n this.rangesContainer.shouldClone = false;\r\n this.rangesContainer.isMeasured = false;\r\n }\r\n var axisRange = event.newValue;\r\n if (axisRange) {\r\n axisRange.contents.parent = this.rangesContainer;\r\n axisRange.isRange = true;\r\n axisRange.events.on(\"valuechanged\", this.invalidateDataItems, this, false);\r\n }\r\n };\r\n /**\r\n * [getAxisField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param axis [description]\r\n * @return [description]\r\n */\r\n Series.prototype.getAxisField = function (axis) {\r\n return;\r\n };\r\n /**\r\n * Shows the tooltip at specific position.\r\n *\r\n * @ignore Exclude from docs\r\n * @param xPosition X\r\n * @param yPosition Y\r\n */\r\n Series.prototype.showTooltipAtPosition = function (xPosition, yPosition) {\r\n // Placeholder method for extending classes to override.\r\n };\r\n Object.defineProperty(Series.prototype, \"minBulletDistance\", {\r\n /**\r\n * @return Distance (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minBulletDistance\");\r\n },\r\n /**\r\n * Minimal distance between data points in pixels.\r\n *\r\n * If distance gets smaller than this, bullets are turned off to avoid\r\n * overlapping.\r\n *\r\n * `0` (zero) disables this behavior.\r\n *\r\n * IMPORTANT: This setting will work only when Series' base axis\r\n * is [[CategoryAxis]] or [[DateAxis]]. If base axis is [[ValueAxis]] the\r\n * setting will be ignored, because it would be a huge overhead to measure\r\n * distance between each and every bullet.\r\n *\r\n * @default 0\r\n * @param value Distance (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"minBulletDistance\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Series.prototype, \"bullets\", {\r\n /**\r\n * A list of bullets that will be added to each and every items in the\r\n * series.\r\n *\r\n * You can push any object that is a descendant of a [[Sprite]] here. All\r\n * items added to this list will be copied and used as a bullet on all data\r\n * items, including their properties, events, etc.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/bullets/} for more info about the concept of Bullets\r\n * @return List of bullets.\r\n */\r\n get: function () {\r\n if (!this._bullets) {\r\n this._bullets = new ListTemplate(new Bullet());\r\n this._bullets.template.virtualParent = this;\r\n this._bullets.events.on(\"inserted\", this.processBullet, this, false);\r\n this._bullets.events.on(\"removed\", this.removeBullet, this, false);\r\n this._disposers.push(new ListDisposer(this._bullets));\r\n this._disposers.push(this._bullets.template);\r\n }\r\n return this._bullets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Binds related legend data item's visual settings to this series' visual\r\n * settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n Series.prototype.createLegendMarker = function (marker) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n Object.defineProperty(Series.prototype, \"hiddenInLegend\", {\r\n /**\r\n * @return Hidden in legend?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hiddenInLegend\");\r\n },\r\n /**\r\n * Should the series be hidden in legend?\r\n *\r\n * @param value Hidden in legend?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"hiddenInLegend\", value)) {\r\n if (this.chart) {\r\n this.chart.feedLegend();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Series.prototype, \"name\", {\r\n /**\r\n * @return Name\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"name\");\r\n },\r\n /**\r\n * Series' name.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"name\", value);\r\n var legendDataItem = this.legendDataItem;\r\n if (legendDataItem) {\r\n legendDataItem.component.invalidate();\r\n legendDataItem.component.invalidateRawData();\r\n }\r\n this.readerTitle = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Series.prototype, \"itemReaderText\", {\r\n /**\r\n * @return Screen reader text template\r\n */\r\n get: function () {\r\n // Get explicitly set reader text\r\n var readerText = this._itemReaderText;\r\n // Not set? Let's try something else\r\n if (!readerText) {\r\n // Tooltip text?\r\n if (this.tooltipText) {\r\n readerText = $utils.plainText(this.tooltipText);\r\n }\r\n else if (this.tooltipHTML) {\r\n readerText = $utils.plainText(this.tooltipHTML);\r\n }\r\n }\r\n if (!this._adapterO) {\r\n return readerText;\r\n }\r\n else {\r\n return this._adapterO.apply(\"itemReaderText\", readerText);\r\n }\r\n },\r\n /**\r\n * Screen reader text to be applied to each individual data item, such\r\n * as bullets, columns or slices.\r\n *\r\n * The template can contain field reference meta codes, i.e. `{dateX}`,\r\n * `{valueY}`, etc.\r\n *\r\n * Any text formatting options, e.g. `[bold]` will be ignored.\r\n *\r\n * @param value Screen reader text template\r\n */\r\n set: function (value) {\r\n this._itemReaderText = value;\r\n this._itemReaderTextChanged = true;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns if number of data items in the series are beyond non-focusable\r\n * count and should not be available for TAB-through.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Items focusable?\r\n */\r\n Series.prototype.itemsFocusable = function () {\r\n return this.dataItems.length >= this.skipFocusThreshold ? false : true;\r\n };\r\n Object.defineProperty(Series.prototype, \"legendDataItem\", {\r\n /**\r\n * @return Data item\r\n */\r\n get: function () {\r\n return this._legendDataItem;\r\n },\r\n /**\r\n * Legend data item that corresponds to this series.\r\n *\r\n * @param value Data item\r\n */\r\n set: function (value) {\r\n this._legendDataItem = value;\r\n this._legendDataItem.itemContainer.deepInvalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n Series.prototype.updateLegendValue = function (dataItem, notRange) {\r\n // if this series has legend item\r\n if (this.legendDataItem) {\r\n var legendSettings = this.legendSettings;\r\n var legendDataItem = this.legendDataItem;\r\n var label = legendDataItem.label;\r\n var valueLabel = legendDataItem.valueLabel;\r\n // update legend\r\n if ((dataItem && !dataItem.isDisposed()) || notRange) {\r\n if (valueLabel) {\r\n if (legendSettings.itemValueText) {\r\n valueLabel.text = legendSettings.itemValueText;\r\n }\r\n valueLabel.dataItem = dataItem;\r\n }\r\n if (label) {\r\n if (legendSettings.itemLabelText) {\r\n label.text = legendSettings.itemLabelText;\r\n }\r\n label.dataItem = dataItem;\r\n }\r\n }\r\n else {\r\n if (label) {\r\n // if itemLabelText is set, means we have to reset label even if labelText is not set\r\n if (legendSettings.labelText || legendSettings.itemLabelText != undefined) {\r\n label.text = legendSettings.labelText;\r\n }\r\n label.dataItem = this.dataItem;\r\n }\r\n if (valueLabel) {\r\n if (legendSettings.valueText || legendSettings.itemValueText != undefined) {\r\n valueLabel.text = legendSettings.valueText;\r\n }\r\n valueLabel.dataItem = this.dataItem;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n Series.prototype.copyFrom = function (source) {\r\n this.bullets.copyFrom(source.bullets);\r\n this.bulletsContainer.copyFrom(source.bulletsContainer);\r\n this.calculatePercent = source.calculatePercent;\r\n this.usePercentHack = source.usePercentHack;\r\n this.simplifiedProcessing = source.simplifiedProcessing;\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * Displays a modal or console message with error, and halts any further\r\n * processing of this element.\r\n *\r\n * @param e Error\r\n */\r\n Series.prototype.raiseCriticalError = function (e) {\r\n if (this._chart && this._chart.modal) {\r\n this._chart.modal.content = this._chart.adapter.apply(\"criticalError\", e).message;\r\n this._chart.modal.closable = false;\r\n if (!options.suppressErrors) {\r\n this._chart.modal.open();\r\n }\r\n this._chart.disabled = true;\r\n }\r\n if (options.verbose) {\r\n console.log(e);\r\n }\r\n };\r\n /**\r\n * Applies filters to the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Series.prototype.applyFilters = function () {\r\n var _this = this;\r\n _super.prototype.applyFilters.call(this);\r\n this.bulletsContainer.filters.clear();\r\n // copyFrom of a list copies, does not clone\r\n $iter.each(this.filters.iterator(), function (filter) {\r\n _this.bulletsContainer.filters.push(filter.clone());\r\n });\r\n };\r\n Object.defineProperty(Series.prototype, \"heatRules\", {\r\n /**\r\n * A list of heat rules to apply to series' elements based on the value\r\n * of the data item.\r\n *\r\n * Heat rules can be any \"numeric\" (including `Color`) property, and can also\r\n * be applied to child objects of series, like columns, bullets, etc.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * series.heatRules.push({\r\n * \"target\": series.columns.template,\r\n * \"property\": \"fill\",\r\n * \"min\": am4core.color(\"#F5DBCB\"),\r\n * \"max\": am4core.color(\"#ED7B84\"),\r\n * \"dataField\": \"valueY\"\r\n *});\r\n *```\r\n * ```Javacript\r\n * series.heatRules.push({\r\n * \"target\": series.columns.template,\r\n * \"property\": \"fill\",\r\n * \"min\": am4core.color(\"#F5DBCB\"),\r\n * \"max\": am4core.color(\"#ED7B84\"),\r\n * \"dataField\": \"valueY\"\r\n *});\r\n *```\r\n *```JSON\r\n *{\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"ColumnSeries\",\r\n * \"heatRules\": [{\r\n * \"target\": \"columns.template\",\r\n * \"property\": \"fill\",\r\n * \"min\": \"#F5DBCB\",\r\n * \"max\": \"#ED7B84\",\r\n * \"dataField\": \"valueY\"\r\n * }]\r\n * }]\r\n *}\r\n *```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/series/#Heat_maps} for more about heat rules\r\n * @return Heat rules\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._heatRules) {\r\n this._heatRules = new List();\r\n this._heatRules.events.on(\"inserted\", function (event) {\r\n var heatRule = event.newValue;\r\n var target = heatRule.target;\r\n if (target) {\r\n var dataField_1 = heatRule.dataField;\r\n if (!$type.hasValue(dataField_1)) {\r\n dataField_1 = \"value\";\r\n }\r\n var seriesDataItem_1 = _this.dataItem;\r\n var property_1 = heatRule.property;\r\n var minValue = $type.toNumber(heatRule.minValue);\r\n var maxValue = $type.toNumber(heatRule.maxValue);\r\n if (!$type.isNumber(minValue) && !$type.isNumber(maxValue)) {\r\n _this.dataItem.events.on(\"calculatedvaluechanged\", function (event) {\r\n if (event.property == dataField_1) {\r\n $iter.each(_this.dataItems.iterator(), function (dataItem) {\r\n var foundSprite = false;\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (sprite.clonedFrom == target) {\r\n var anySprite = sprite;\r\n anySprite[property_1] = anySprite[property_1];\r\n foundSprite = true;\r\n }\r\n });\r\n if (!foundSprite) {\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (sprite instanceof Container) {\r\n $iter.each(sprite.children.iterator(), function (child) {\r\n if (child.className == target.className) {\r\n var anyChild = child;\r\n anyChild[property_1] = anyChild[property_1];\r\n }\r\n // giveup here\r\n else if (child instanceof Container) {\r\n child.deepInvalidate();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n _this.dataItems.template.events.on(\"workingvaluechanged\", function (event) {\r\n if (event.property == dataField_1) {\r\n var dataItem = event.target;\r\n var foundSprite_1 = false;\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (sprite.clonedFrom == target) {\r\n var anySprite = sprite;\r\n anySprite[property_1] = anySprite[property_1];\r\n foundSprite_1 = true;\r\n }\r\n });\r\n if (!foundSprite_1) {\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (sprite instanceof Container) {\r\n $iter.each(sprite.children.iterator(), function (child) {\r\n if (child.className == target.className) {\r\n var anyChild = child;\r\n anyChild[property_1] = anyChild[property_1];\r\n }\r\n // givup here\r\n else if (child instanceof Container) {\r\n child.deepInvalidate();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n target.adapter.add(property_1, function (value, ruleTarget, property) {\r\n var minValue = $type.toNumber(heatRule.minValue);\r\n var maxValue = $type.toNumber(heatRule.maxValue);\r\n var min = heatRule.min;\r\n var max = heatRule.max;\r\n if (ruleTarget instanceof Sprite) {\r\n var anySprite = ruleTarget;\r\n var propertyField = anySprite.propertyFields[property];\r\n if (propertyField && ruleTarget.dataItem) {\r\n var dataContext = ruleTarget.dataItem.dataContext;\r\n if (dataContext && $type.hasValue(dataContext[propertyField])) {\r\n return value;\r\n }\r\n }\r\n }\r\n var dataItem = ruleTarget.dataItem;\r\n if (!$type.isNumber(minValue)) {\r\n minValue = seriesDataItem_1.values[dataField_1].low;\r\n }\r\n if (!$type.isNumber(maxValue)) {\r\n maxValue = seriesDataItem_1.values[dataField_1].high;\r\n }\r\n if (dataItem) {\r\n var fieldValues = dataItem.values[dataField_1];\r\n if (fieldValues) {\r\n var workingValue = dataItem.getActualWorkingValue(dataField_1);\r\n if ($type.hasValue(min) && $type.hasValue(max) && $type.isNumber(minValue) && $type.isNumber(maxValue) && $type.isNumber(workingValue)) {\r\n var percent = void 0;\r\n if (heatRule.logarithmic) {\r\n percent = (Math.log(workingValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E) / ((Math.log(maxValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E));\r\n }\r\n else {\r\n percent = (workingValue - minValue) / (maxValue - minValue);\r\n }\r\n if ($type.isNumber(workingValue) && (!$type.isNumber(percent) || Math.abs(percent) == Infinity)) {\r\n percent = 0.5;\r\n }\r\n // fixes problems if all values are the same\r\n if ($type.isNumber(min)) {\r\n return min + (max - min) * percent;\r\n }\r\n else if (min instanceof Color) {\r\n return new Color($colors.interpolate(min.rgb, max.rgb, percent));\r\n }\r\n }\r\n }\r\n }\r\n return value;\r\n });\r\n }\r\n });\r\n }\r\n return this._heatRules;\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 Series.prototype.processConfig = function (config) {\r\n var heatRules;\r\n if (config) {\r\n // Set up bullets\r\n if ($type.hasValue(config.bullets) && $type.isArray(config.bullets)) {\r\n for (var i = 0, len = config.bullets.length; i < len; i++) {\r\n var bullets = config.bullets[i];\r\n if (!$type.hasValue(bullets.type)) {\r\n bullets.type = \"Bullet\";\r\n }\r\n }\r\n }\r\n // Let's take heatRules out of the config, so that we can process\r\n // them later, when bullets are already there\r\n if ($type.hasValue(config.heatRules) && $type.isArray(config.heatRules)) {\r\n heatRules = config.heatRules;\r\n delete config.heatRules;\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n // Process heat rules again, when all other elements are ready\r\n if (heatRules) {\r\n for (var i = 0, len = heatRules.length; i < len; i++) {\r\n var rule = heatRules[i];\r\n // Resolve target\r\n var target = this;\r\n if ($type.hasValue(rule.target) && $type.isString(rule.target)) {\r\n // Check if we can find this element by id\r\n if (this.map.hasKey(rule.target)) {\r\n target = this.map.getKey(rule.target);\r\n }\r\n else {\r\n var parts = rule.target.split(\".\");\r\n for (var x = 0; x < parts.length; x++) {\r\n if (target instanceof List) {\r\n var listitem = target.getIndex($type.toNumber(parts[x]));\r\n if (!listitem) {\r\n target = target[parts[x]];\r\n }\r\n else {\r\n target = listitem;\r\n }\r\n }\r\n else {\r\n var maybeIndex = parts[x].match(/^(.*)\\[([0-9]+)\\]/);\r\n if (maybeIndex) {\r\n if (target[maybeIndex[1]] instanceof List) {\r\n target = target[maybeIndex[1]].getIndex($type.toNumber(maybeIndex[2]));\r\n }\r\n else {\r\n target = target[maybeIndex[1]][$type.toNumber(maybeIndex[2])];\r\n }\r\n }\r\n else {\r\n target = target[parts[x]];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n rule.target = target;\r\n // Resolve colors and percents\r\n if ($type.hasValue(rule.min)) {\r\n rule.min = this.maybeColorOrPercent(rule.min);\r\n }\r\n if ($type.hasValue(rule.max)) {\r\n rule.max = this.maybeColorOrPercent(rule.max);\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, {\r\n heatRules: heatRules\r\n });\r\n }\r\n };\r\n /**\r\n * Returns visibility value\r\n * @ignore\r\n */\r\n /*\r\n protected getVisibility(): boolean {\r\n let hidden = this.getPropertyValue(\"hidden\");\r\n if (hidden) {\r\n return false;\r\n }\r\n else {\r\n return super.getVisibility();\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 Series.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 == \"heatRules\") {\r\n return 1;\r\n }\r\n else if (b == \"heatRules\") {\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 * Sets `visibility` property:\r\n *\r\n * * `true` - visible\r\n * * `false` - hidden\r\n *\r\n * @param value true - visible, false - hidden\r\n * @return Current visibility\r\n */\r\n Series.prototype.setVisibility = function (value) {\r\n _super.prototype.setVisibility.call(this, value);\r\n this.bulletsContainer.visible = value;\r\n };\r\n return Series;\r\n}(Component));\r\nexport { Series };\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[\"Series\"] = Series;\r\nregistry.registeredClasses[\"SeriesDataItem\"] = SeriesDataItem;\r\n//# sourceMappingURL=Series.js.map","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nvar StepLineSeriesSegment = /** @class */ (function (_super) {\r\n __extends(StepLineSeriesSegment, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeriesSegment() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"StepLineSeriesSegment\";\r\n return _this;\r\n }\r\n /**\r\n * Draws the series segment.\r\n *\r\n * @ignore Exclude from docs\r\n * @param points Points to connect\r\n * @param closePoints ?\r\n * @param smoothnessX Horizontal bezier setting (?)\r\n * @param smoothnessY Vertical bezier setting (?)\r\n */\r\n StepLineSeriesSegment.prototype.drawSegment = function (points, closePoints, smoothnessX, smoothnessY, noRisers, vertical) {\r\n if (points.length > 0 && closePoints.length > 0) {\r\n if (noRisers) {\r\n var path = $path.moveTo(points[0]);\r\n if (points.length > 0) {\r\n for (var i = 1; i < points.length; i++) {\r\n var point = points[i];\r\n if (i / 2 == Math.round(i / 2)) {\r\n path += $path.moveTo(point);\r\n }\r\n else {\r\n path += $path.lineTo(point);\r\n }\r\n }\r\n }\r\n this.strokeSprite.path = path;\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n path = $path.moveTo(points[0]) + $path.polyline(points);\r\n path += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n else {\r\n }\r\n }\r\n else {\r\n var path = $path.moveTo(points[0]) + $path.polyline(points);\r\n this.strokeSprite.path = path;\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n path += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n }\r\n }\r\n else {\r\n this.strokeSprite.path = \"\";\r\n this.fillSprite.path = \"\";\r\n }\r\n };\r\n return StepLineSeriesSegment;\r\n}(LineSeriesSegment));\r\nexport { StepLineSeriesSegment };\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[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n//# sourceMappingURL=StepLineSeriesSegment.js.map","/**\r\n * Step line series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem } from \"./LineSeries\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\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 [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar StepLineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(StepLineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"StepLineSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return StepLineSeriesDataItem;\r\n}(LineSeriesDataItem));\r\nexport { StepLineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar StepLineSeries = /** @class */ (function (_super) {\r\n __extends(StepLineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"StepLineSeries\";\r\n _this.applyTheme();\r\n _this.startLocation = 0;\r\n _this.endLocation = 1;\r\n return _this;\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 StepLineSeries.prototype.createDataItem = function () {\r\n return new StepLineSeriesDataItem();\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n StepLineSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var startLocationX;\r\n var endLocationX;\r\n var startLocationY;\r\n var endLocationY;\r\n if (this.baseAxis == this.xAxis) {\r\n startLocationX = this.startLocation;\r\n endLocationX = this.endLocation;\r\n startLocationY = this.getAdjustedXLocation(dataItem, this.yOpenField);\r\n endLocationY = this.getAdjustedXLocation(dataItem, this.yField);\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n startLocationY = this.startLocation;\r\n endLocationY = this.endLocation;\r\n startLocationX = this.getAdjustedXLocation(dataItem, this.xOpenField);\r\n endLocationX = this.getAdjustedXLocation(dataItem, this.xField);\r\n }\r\n var x0 = this.xAxis.getX(dataItem, xField, startLocationX);\r\n var y0 = this.yAxis.getY(dataItem, yField, startLocationY);\r\n var x1 = this.xAxis.getX(dataItem, xField, endLocationX);\r\n var y1 = this.yAxis.getY(dataItem, yField, endLocationY);\r\n x0 = $math.fitToRange(x0, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y0 = $math.fitToRange(y0, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n x1 = $math.fitToRange(x1, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y1 = $math.fitToRange(y1, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n // this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n if (!this.noRisers) {\r\n if (points.length > 1) {\r\n var prevPoint = points[points.length - 1];\r\n if (this.baseAxis == this.xAxis) {\r\n if (backwards) {\r\n points.push({ x: prevPoint.x, y: y1 });\r\n }\r\n else {\r\n points.push({ x: x0, y: prevPoint.y });\r\n }\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n if (backwards) {\r\n points.push({ x: x1, y: prevPoint.y });\r\n }\r\n else {\r\n points.push({ x: prevPoint.x, y: y0 });\r\n }\r\n }\r\n }\r\n }\r\n var point0 = { x: x0, y: y0 };\r\n var point1 = { x: x1, y: y1 };\r\n if (backwards) {\r\n points.push(point1, point0);\r\n }\r\n else {\r\n points.push(point0, point1);\r\n }\r\n };\r\n /**\r\n * Draws the line segment.\r\n *\r\n * @param segment Segment\r\n * @param points Segment points\r\n * @param closePoints Segment close points\r\n */\r\n StepLineSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n var vertical = false;\r\n if (this.yAxis == this.baseAxis) {\r\n vertical = true;\r\n }\r\n segment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n StepLineSeries.prototype.createSegment = function () {\r\n return new StepLineSeriesSegment();\r\n };\r\n Object.defineProperty(StepLineSeries.prototype, \"noRisers\", {\r\n /**\r\n * @return No risers\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"noRisers\");\r\n },\r\n /**\r\n * Specifies if step line series should draw only horizontal (or only\r\n * vertical, depending on base axis) lines, instead of connecting them with\r\n * vertical (or horizontal) lines.\r\n *\r\n * @default false\r\n * @param value No risers\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"noRisers\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StepLineSeries.prototype, \"startLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * start location of the step\r\n *\r\n * @param value Location (0-1)\r\n * @default 0\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StepLineSeries.prototype, \"endLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Step end location.\r\n *\r\n * @param value Location (0-1)\r\n * #default 1\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return StepLineSeries;\r\n}(LineSeries));\r\nexport { StepLineSeries };\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[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n//# sourceMappingURL=StepLineSeries.js.map","/**\r\n * TreeMap series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\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/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar TreeMapSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(TreeMapSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"TreeMapSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"parentName\", {\r\n /**\r\n * Data for the this particular item.\r\n *\r\n * @param value Item's data\r\n */\r\n //public set dataContext(value: Object) {\r\n //\tthis._dataContext = value;\r\n //}\r\n /**\r\n * @return Item's data\r\n */\r\n /*\r\n public get dataContext(): Object {\r\n // It's because data of tree series is TreeMapDataItems.\r\n if (this._dataContext) {\r\n return (this._dataContext).dataContext;\r\n }\r\n }*/\r\n /**\r\n * The name of the item's parent item.\r\n *\r\n * @return Parent name\r\n */\r\n get: function () {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem && treeMapDataItem.parent) {\r\n return treeMapDataItem.parent.name;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"value\", {\r\n /**\r\n * Item's numeric value.\r\n *\r\n * @readonly\r\n * @return Value\r\n */\r\n get: function () {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n return treeMapDataItem.value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"treeMapDataItem\", {\r\n /**\r\n * A corresponding data item from the tree map.\r\n *\r\n * @readonly\r\n * @return Data item\r\n */\r\n get: function () {\r\n return this._dataContext;\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 TreeMapSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n treeMapDataItem.hide(duration);\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 TreeMapSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n treeMapDataItem.show(duration, delay, fields);\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n return TreeMapSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { TreeMapSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nvar TreeMapSeries = /** @class */ (function (_super) {\r\n __extends(TreeMapSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"TreeMapSeries\";\r\n _this.applyTheme();\r\n _this.fillOpacity = 1;\r\n _this.strokeOpacity = 1;\r\n _this.minBulletDistance = 0;\r\n _this.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n _this.columns.template.configField = \"config\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.stroke = interfaceColors.getFor(\"background\");\r\n _this.dataFields.openValueX = \"x0\";\r\n _this.dataFields.valueX = \"x1\";\r\n _this.dataFields.openValueY = \"y0\";\r\n _this.dataFields.valueY = \"y1\";\r\n _this.sequencedInterpolation = false;\r\n _this.showOnInit = false;\r\n // otherwise nodes don't stack nicely to each other\r\n _this.columns.template.pixelPerfect = false;\r\n return _this;\r\n }\r\n /**\r\n * Processes data item.\r\n *\r\n * @param dataItem Data item\r\n * @param dataContext Raw data\r\n * @param index Index of the data item\r\n */\r\n TreeMapSeries.prototype.processDataItem = function (dataItem, dataContext) {\r\n dataContext.seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n _super.prototype.processDataItem.call(this, dataItem, dataContext);\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 TreeMapSeries.prototype.createDataItem = function () {\r\n return new TreeMapSeriesDataItem();\r\n };\r\n /**\r\n * Shows series.\r\n *\r\n * @param duration Duration of fade in (ms)\r\n * @return Animation\r\n */\r\n TreeMapSeries.prototype.show = function (duration) {\r\n if (this.preventShow) {\r\n return;\r\n }\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n this.dataItems.each(function (dataItem) {\r\n //dataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n dataItem.show(duration);\r\n });\r\n return _super.prototype.showReal.call(this, interpolationDuration);\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of fade out (ms)\r\n * @return Animation\r\n */\r\n TreeMapSeries.prototype.hide = function (duration) {\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n var animation = _super.prototype.hideReal.call(this, interpolationDuration);\r\n this.dataItems.each(function (dataItem) {\r\n //dataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n dataItem.hide(duration);\r\n });\r\n return animation;\r\n };\r\n /**\r\n * Process values.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMapSeries.prototype.processValues = function () {\r\n // Just overriding so that inherited method does not kick in.\r\n };\r\n /**\r\n * Returns relative start location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n TreeMapSeries.prototype.getStartLocation = function (dataItem) {\r\n return 0;\r\n };\r\n /**\r\n * Returns relative end location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n TreeMapSeries.prototype.getEndLocation = function (dataItem) {\r\n return 1;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n TreeMapSeries.prototype.dataChangeUpdate = function () {\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 TreeMapSeries.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Add empty data fields if the they are not set, so that XYSeries\r\n // dataField check does not result in error.\r\n if (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n config.dataFields = {};\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n TreeMapSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(RoundedRectangle);\r\n column.shouldClone = false;\r\n $object.copyProperties(this, column, visualProperties);\r\n //column.copyFrom(this.columns.template);\r\n column.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n column.width = w;\r\n column.height = h;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.fill;\r\n legendDataItem.colorOrig = column.fill;\r\n };\r\n TreeMapSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n _super.prototype.disableUnusedColumns.call(this, dataItem);\r\n if (dataItem.column) {\r\n dataItem.column.__disabled = false;\r\n }\r\n };\r\n return TreeMapSeries;\r\n}(ColumnSeries));\r\nexport { TreeMapSeries };\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[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n//# sourceMappingURL=TreeMapSeries.js.map","/**\r\n * XY series module.\r\n */\r\nimport { __extends, __values } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\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 $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { options } from \"../../core/Options\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(XYSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYSeriesDataItem\";\r\n _this.values.customValue = {};\r\n _this.values.valueX = { stack: 0 };\r\n _this.values.valueY = { stack: 0 };\r\n _this.values.openValueX = {};\r\n _this.values.openValueY = {};\r\n _this.values.dateX = {};\r\n _this.values.dateY = {};\r\n _this.values.openDateX = {};\r\n _this.values.openDateY = {};\r\n _this.setLocation(\"dateX\", 0.5, 0);\r\n _this.setLocation(\"dateY\", 0.5, 0);\r\n _this.setLocation(\"categoryX\", 0.5, 0);\r\n _this.setLocation(\"categoryY\", 0.5, 0);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"valueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueX.value;\r\n },\r\n /**\r\n * Item's numeric value on X value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"customValue\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.customValue.value;\r\n },\r\n /**\r\n * Item's custom numeric value.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"customValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"valueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueY.value;\r\n },\r\n /**\r\n * Item's numeric value on Y value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"dateX\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"dateX\");\r\n },\r\n /**\r\n * Item's date value on X date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"dateX\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"dateY\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"dateY\");\r\n },\r\n /**\r\n * Item's date value on Y date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"dateY\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"categoryX\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.categoryX;\r\n },\r\n /**\r\n * Item's category on X category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"categoryX\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"categoryY\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.categoryY;\r\n },\r\n /**\r\n * Item's category on Y category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"categoryY\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.openValueX.value;\r\n },\r\n /**\r\n * Item's open numeric value on X value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"openValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.openValueY.value;\r\n },\r\n /**\r\n * Item's open numeric value on Y value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"openValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openDateX\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"openDateX\");\r\n },\r\n /**\r\n * Item's open date value on X date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"openDateX\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openDateY\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"openDateY\");\r\n },\r\n /**\r\n * Item's open date value on Y date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"openDateY\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openCategoryX\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.openCategoryX;\r\n },\r\n /**\r\n * Item's open category on X category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"openCategoryX\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openCategoryY\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.openCategoryY;\r\n },\r\n /**\r\n * Item's open category on Y category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"openCategoryY\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Return smallest value out of all item's value fields.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fields Fields to check in\r\n * @param working Include working (temporary) values\r\n * @param stackValue If item is in a stack, the value item starts as\r\n * @return Value\r\n */\r\n XYSeriesDataItem.prototype.getMin = function (fields, working, stackValue) {\r\n var _this = this;\r\n //if (this.visible) { // dumped because of non smooth zooming\r\n var min;\r\n if (!$type.isNumber(stackValue)) {\r\n stackValue = 0;\r\n }\r\n $array.each(fields, function (field) {\r\n var value;\r\n if (working) {\r\n value = _this.getWorkingValue(field);\r\n }\r\n else {\r\n value = _this.getValue(field);\r\n }\r\n value += stackValue;\r\n if (value < min || !$type.isNumber(min)) {\r\n min = value;\r\n }\r\n });\r\n return min;\r\n //}\r\n };\r\n /**\r\n * Return biggest value out of all item's value fields.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fields Fields to check in\r\n * @param working Include working (temporary) values\r\n * @param stackValue If item is in a stack, the value item starts as\r\n * @return Value\r\n */\r\n XYSeriesDataItem.prototype.getMax = function (fields, working, stackValue) {\r\n var _this = this;\r\n //if (this.visible) { // dumped because of non smooth zooming\r\n var max;\r\n if (!$type.isNumber(stackValue)) {\r\n stackValue = 0;\r\n }\r\n $array.each(fields, function (field) {\r\n var value;\r\n if (working) {\r\n value = _this.getWorkingValue(field);\r\n }\r\n else {\r\n value = _this.getValue(field);\r\n }\r\n value += stackValue;\r\n if (value > max || !$type.isNumber(max)) {\r\n max = value;\r\n }\r\n });\r\n return max;\r\n //}\r\n };\r\n return XYSeriesDataItem;\r\n}(SeriesDataItem));\r\nexport { XYSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar XYSeries = /** @class */ (function (_super) {\r\n __extends(XYSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Indicates which of the series' `dataFields` to calculate aggregate values\r\n * for.\r\n *\r\n * Available data fields for all [[XYSeries]] are:\r\n * `valueX`, `valueY`, `openValueX`, and `openValueY`.\r\n *\r\n * [[CandlestickSeries]] adds:\r\n * `lowValueX`, `lowValueY`, `highValueX`, and `highValueY`.\r\n *\r\n * Available options:\r\n * `\"open\"`, `\"close\"`, `\"low\"`, `\"high\"`, `\"average\"`, `\"sum\"`.\r\n *\r\n * Defaults are as follows:\r\n * * `valueX`: `\"close\"`\r\n * * `valueY`: `\"close\"`\r\n * * `openValueX`: `\"open\"`\r\n * * `openValueY`: `\"open\"`\r\n * * `lowValueX`: `\"low\"`\r\n * * `lowValueY`: `\"low\"`\r\n * * `highValueX`: `\"high\"`\r\n * * `highValueY`: `\"high\"`\r\n *\r\n * Is required only if data being plotted on a `DateAxis` and\r\n * its `groupData` is set to `true`.\r\n *\r\n * ```TypeScript\r\n * let dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * let valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * let series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JavaScript\r\n * var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * var valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * var series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"groupData\": true\r\n * }],\r\n * \"yAxes\": [{\r\n * \"type\": \"ValueAxis\"\r\n * }],\r\n * \"series\": [{\r\n * \"type\": \"LineSeries\",\r\n * \"dataFields\": {\r\n * \"dateX\": \"date\",\r\n * \"valueY\": \"value\"\r\n * },\r\n * \"groupFields\": {\r\n * \"valueY\": \"average\"\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above setup will ensure, that if there are many data items within\r\n * selected range, they will be grouped into aggregated data points, using\r\n * average value of all the values.\r\n *\r\n * For example if we have 2 years worth of daily data (~700 data items), when\r\n * fully zoomed out, the chart would show ~100 data items instead: one for\r\n * each week in those two years.\r\n *\r\n * Grouping will occur automatically, based on current selection range, and\r\n * will change dynamically when user zooms in/out the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n * @since 4.7.0\r\n */\r\n _this.groupFields = {};\r\n /**\r\n * X axis the series is attached to.\r\n */\r\n _this._xAxis = new MutableValueDisposer();\r\n /**\r\n * Y axis the series is attached to.\r\n */\r\n _this._yAxis = new MutableValueDisposer();\r\n /**\r\n * [_xValueFields description]\r\n *\r\n * @todo Description\r\n */\r\n _this._xValueFields = [];\r\n /**\r\n * [_yValueFields description]\r\n *\r\n * @todo Description\r\n */\r\n _this._yValueFields = [];\r\n /**\r\n * @ignore\r\n */\r\n _this._baseInterval = {};\r\n /**\r\n * @ignore\r\n */\r\n _this.dataGrouped = false;\r\n /**\r\n * @ignore\r\n */\r\n _this.usesShowFields = false;\r\n /**\r\n * @ignore\r\n */\r\n _this._dataSetChanged = false;\r\n _this._maxxX = 100000;\r\n _this._maxxY = 100000;\r\n _this._propertiesChanged = false;\r\n /**\r\n * @ignore\r\n */\r\n _this.outOfRange = false;\r\n _this.className = \"XYSeries\";\r\n _this.isMeasured = false;\r\n _this.groupFields.valueX = \"close\";\r\n _this.groupFields.valueY = \"close\";\r\n _this.groupFields.customValue = \"close\";\r\n _this.groupFields.openValueX = \"open\";\r\n _this.groupFields.openValueY = \"open\";\r\n _this.cursorTooltipEnabled = true;\r\n _this.cursorHoverEnabled = true;\r\n _this.excludeFromTotal = false;\r\n _this.mainContainer.mask = new Sprite();\r\n _this.mainContainer.mask.setElement(_this.paper.add(\"path\"));\r\n _this.stacked = false;\r\n _this.snapTooltip = false;\r\n _this._showBullets = false;\r\n _this.tooltip.pointerOrientation = \"horizontal\";\r\n _this.properties.stackToNegative = true;\r\n _this.hideTooltipWhileZooming = true;\r\n _this.setPropertyValue(\"maskBullets\", true);\r\n _this.tooltip.events.on(\"hidden\", function () {\r\n _this.returnBulletDefaultState();\r\n }, undefined, false);\r\n _this._disposers.push(_this._xAxis);\r\n _this._disposers.push(_this._yAxis);\r\n _this.observe(visualProperties, function () {\r\n if (_this.inited) {\r\n _this._propertiesChanged = true;\r\n if (_this.legendDataItem) {\r\n _this.legendDataItem.childrenCreated = false;\r\n }\r\n if (_this.chart && _this.chart.legend) {\r\n _this.chart.legend.invalidateDataItems();\r\n }\r\n _this.invalidate();\r\n }\r\n }, undefined, false);\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 XYSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"X/Y Series\");\r\n }\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 XYSeries.prototype.createDataItem = function () {\r\n return new XYSeriesDataItem();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.resetExtremes = function () {\r\n this._tmin.clear();\r\n this._tmax.clear();\r\n this._smin.clear();\r\n this._smax.clear();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.dataChangeUpdate = function () {\r\n this.dataGrouped = false;\r\n this._baseInterval = {};\r\n this._currentDataSetId = \"\";\r\n this.resetExtremes();\r\n if (this.xAxis) {\r\n this.xAxis.seriesDataChangeUpdate(this);\r\n }\r\n if (this.yAxis) {\r\n this.yAxis.seriesDataChangeUpdate(this);\r\n }\r\n };\r\n /**\r\n * (Re)validates the series' data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateData = function () {\r\n this._baseInterval = {};\r\n var dataFields = this.dataFields;\r\n if (dataFields.valueYShow || dataFields.openValueXShow || dataFields.openValueXShow || dataFields.openValueYShow) {\r\n this.usesShowFields = true;\r\n }\r\n else {\r\n this.usesShowFields = false;\r\n }\r\n this.defineFields();\r\n if (this.data.length > 0) {\r\n this.dataChangeUpdate();\r\n }\r\n _super.prototype.validateData.call(this);\r\n this.updateItemReaderText();\r\n if (this.chart) {\r\n if (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n throw Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n }\r\n }\r\n // 4.7.21 solves 51540\r\n if (this.inited && this.isHidden) {\r\n this.hide(0);\r\n }\r\n this.dataGrouped = false;\r\n };\r\n /**\r\n * Processes data item.\r\n *\r\n * @param dataItem Data item\r\n * @param dataContext Raw data\r\n * @param index Index of the data item\r\n */\r\n XYSeries.prototype.processDataItem = function (dataItem, dataContext) {\r\n try {\r\n _super.prototype.processDataItem.call(this, dataItem, dataContext);\r\n this.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n this.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n this.setInitialWorkingValues(dataItem);\r\n }\r\n catch (e) {\r\n if (this._chart) {\r\n this._chart.raiseCriticalError(e);\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * When validating raw data, instead of processing data item, we update it\r\n *\r\n * @ignore Exclude from docs\r\n * @param item\r\n */\r\n XYSeries.prototype.updateDataItem = function (dataItem) {\r\n _super.prototype.updateDataItem.call(this, dataItem);\r\n //dataItem.events.disable();\r\n this.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n this.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n //dataItem.events.enable();\t\t\r\n };\r\n /**\r\n * Inits data item's working values.\r\n *\r\n * @param dataItem Data item\r\n * @param index Data item's index\r\n */\r\n XYSeries.prototype.setInitialWorkingValues = function (dataItem) {\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis) {\r\n var dataItemsX = this.dataItemsByAxis.getKey(xAxis.uid);\r\n if (dataItemsX) {\r\n dataItemsX.clear();\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n this.clearCatAxis(xAxis);\r\n }\r\n }\r\n if (yAxis) {\r\n var dataItemsY = this.dataItemsByAxis.getKey(yAxis.uid);\r\n if (dataItemsY) {\r\n dataItemsY.clear();\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n this.clearCatAxis(yAxis);\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.clearCatAxis = function (axis) {\r\n var uid = this.uid;\r\n axis.dataItems.each(function (dataItem) {\r\n if (dataItem.seriesDataItems[uid]) {\r\n dataItem.seriesDataItems[uid] = [];\r\n }\r\n });\r\n };\r\n /**\r\n * Sets up which data fields to use for data access.\r\n */\r\n XYSeries.prototype.defineFields = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n var xAxisFieldName = xAxis.axisFieldName;\r\n var xField = (xAxisFieldName + \"X\");\r\n var xOpenField = (\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n var yAxisFieldName = yAxis.axisFieldName;\r\n var yField = (yAxisFieldName + \"Y\");\r\n var yOpenField = (\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n this._xField = xField;\r\n this._yField = yField;\r\n if (this.dataFields[xOpenField]) {\r\n this._xOpenField = xOpenField;\r\n }\r\n if (this.dataFields[yOpenField]) {\r\n this._yOpenField = yOpenField;\r\n }\r\n if (!this.dataFields[yOpenField] && this.baseAxis == yAxis) {\r\n this._yOpenField = yField;\r\n }\r\n if (!this.dataFields[xOpenField] && this.baseAxis == xAxis) {\r\n this._xOpenField = xField;\r\n }\r\n if (this.stacked && this.baseAxis == xAxis) {\r\n this._xOpenField = xField;\r\n }\r\n if (this.stacked && this.baseAxis == yAxis) {\r\n this._yOpenField = yField;\r\n }\r\n if ((xAxis instanceof CategoryAxis) && (yAxis instanceof CategoryAxis)) {\r\n if (!this._yOpenField) {\r\n this._yOpenField = yField;\r\n }\r\n }\r\n this._xValueFields = [];\r\n this._yValueFields = [];\r\n this.addValueField(xAxis, this._xValueFields, this._xField);\r\n this.addValueField(xAxis, this._xValueFields, this._xOpenField);\r\n this.addValueField(yAxis, this._yValueFields, this._yField);\r\n this.addValueField(yAxis, this._yValueFields, this._yOpenField);\r\n }\r\n };\r\n /**\r\n * [axis description]\r\n *\r\n * @todo Description\r\n * @param axis Axis\r\n * @param fields Fields (?)\r\n * @param field Field\r\n */\r\n XYSeries.prototype.addValueField = function (axis, fields, field) {\r\n if (axis instanceof ValueAxis) {\r\n if ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n fields.push(field);\r\n }\r\n }\r\n };\r\n /**\r\n * Sets category field from the category axis.\r\n *\r\n * User might set field for category axis only, but not for series. In such\r\n * case, we take field value from axis and set it for series.\r\n *\r\n * @param field Field\r\n * @param axis Axis\r\n */\r\n XYSeries.prototype.setCategoryAxisField = function (field, axis) {\r\n if (!$type.hasValue(this.dataFields[field])) {\r\n this.dataFields[field] = axis.dataFields.category;\r\n }\r\n };\r\n /**\r\n * Sets date field from the date axis.\r\n *\r\n * User might set field for category axis only, but not for series. In such\r\n * case, we take field value from axis and set it for series.\r\n *\r\n * @param field Field\r\n * @param axis Axis\r\n */\r\n XYSeries.prototype.setDateAxisField = function (field, axis) {\r\n if (!$type.hasValue(this.dataFields[field])) {\r\n this.dataFields[field] = axis.dataFields.date;\r\n }\r\n };\r\n /**\r\n * Performs after-draw tasks, e.g. creates masks.\r\n */\r\n XYSeries.prototype.afterDraw = function () {\r\n _super.prototype.afterDraw.call(this);\r\n this.createMask();\r\n };\r\n /**\r\n * Create a mask for the series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.createMask = function () {\r\n // this mask from which we cut out ranges. does not work well if ranges overlap.\r\n if (this.mainContainer.mask) {\r\n var path_1 = this.getMaskPath();\r\n // @todo: this approach won't work well on circluar or other non x/y axes\r\n $iter.each(this.axisRanges.iterator(), function (range) {\r\n if (range.axisFill.fillPath) {\r\n range.axisFill.validate();\r\n path_1 += range.axisFill.fillPath;\r\n }\r\n });\r\n this.mainContainer.mask.path = path_1;\r\n }\r\n };\r\n /**\r\n * Returns an SVG path to use as series mask.\r\n *\r\n * @return SVG path\r\n */\r\n XYSeries.prototype.getMaskPath = function () {\r\n if (this.xAxis && this.yAxis) {\r\n return $path.rectToPath({\r\n x: 0,\r\n y: 0,\r\n width: this.xAxis.axisLength,\r\n height: this.yAxis.axisLength\r\n });\r\n }\r\n return \"\";\r\n };\r\n /**\r\n * Returns axis data field to use.\r\n *\r\n * @param axis Axis\r\n * @return Field name\r\n */\r\n XYSeries.prototype.getAxisField = function (axis) {\r\n if (axis == this.xAxis) {\r\n return this.xField;\r\n }\r\n if (axis == this.yAxis) {\r\n return this.yField;\r\n }\r\n };\r\n /**\r\n * Validates data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateDataItems = function () {\r\n var chart = this.chart;\r\n if (chart) {\r\n this._maxxX = $math.max(100000, chart.plotContainer.maxWidth * 2);\r\n this._maxxY = $math.max(100000, chart.plotContainer.maxHeight * 2);\r\n }\r\n // this helps date axis to check which baseInterval we should use\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n xAxis.updateAxisBySeries();\r\n yAxis.updateAxisBySeries();\r\n }\r\n _super.prototype.validateDataItems.call(this);\r\n if (xAxis && yAxis) {\r\n xAxis.postProcessSeriesDataItems(this);\r\n yAxis.postProcessSeriesDataItems(this);\r\n }\r\n };\r\n /**\r\n * Validates data range.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateDataRange = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (xAxis.dataRangeInvalid) {\r\n xAxis.validateDataRange();\r\n }\r\n if (yAxis.dataRangeInvalid) {\r\n yAxis.validateDataRange();\r\n }\r\n }\r\n _super.prototype.validateDataRange.call(this);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validate = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (xAxis.invalid) {\r\n xAxis.validate();\r\n }\r\n if (yAxis.invalid) {\r\n yAxis.validate();\r\n }\r\n this.y = yAxis.pixelY;\r\n this.x = xAxis.pixelX;\r\n this._showBullets = true;\r\n var minBulletDistance = this.minBulletDistance;\r\n if ($type.isNumber(minBulletDistance)) {\r\n if (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n this._showBullets = false;\r\n }\r\n }\r\n }\r\n this.updateTooltip();\r\n if ((xAxis instanceof DateAxis && xAxis.groupData && !this.dataGrouped) || (yAxis instanceof DateAxis && yAxis.groupData && !this.dataGrouped)) {\r\n return;\r\n }\r\n _super.prototype.validate.call(this);\r\n var chart = this.chart;\r\n var maskBullets = this.maskBullets;\r\n if (chart && maskBullets) {\r\n if (chart.className == \"XYChart\") {\r\n if (chart.leftAxesContainer.layout == \"vertical\" || chart.rightAxesContainer.layout == \"vertical\") {\r\n if (this.yAxis) {\r\n this.bulletsContainer.mask = this.yAxis.renderer.gridContainer;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n if (chart.topAxesContainer.layout == \"horizontal\" || chart.bottomAxesContainer.layout == \"horizontal\") {\r\n if (this.xAxis) {\r\n this.bulletsContainer.mask = this.xAxis.renderer.gridContainer;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"xAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n if (this.chart) {\r\n if (!this._xAxis.get()) {\r\n var axis = this.chart.xAxes.getIndex(0);\r\n if (!axis) {\r\n throw Error(\"There are no X axes on chart.\");\r\n }\r\n this.xAxis = axis;\r\n }\r\n return this._xAxis.get();\r\n }\r\n },\r\n /**\r\n * X axis the series is attached to.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n this.setXAxis(axis);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n XYSeries.prototype.setXAxis = function (axis) {\r\n var oldAxis = this._xAxis.get();\r\n if (oldAxis != axis) {\r\n if (oldAxis) {\r\n this.dataItemsByAxis.removeKey(oldAxis.uid);\r\n // TODO why is this here ?\r\n this._xAxis.dispose();\r\n // temp @todo: why it is not disposed?\r\n oldAxis.series.removeValue(this);\r\n }\r\n this._xAxis.set(axis, axis.registerSeries(this));\r\n this.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n this.invalidateData();\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"yAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n if (this.chart) {\r\n if (!this._yAxis.get()) {\r\n var axis = this.chart.yAxes.getIndex(0);\r\n if (!axis) {\r\n throw Error(\"There are no Y axes on chart.\");\r\n }\r\n this.yAxis = axis;\r\n }\r\n return this._yAxis.get();\r\n }\r\n },\r\n /**\r\n * Y axis the series is attached to.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n this.setYAxis(axis);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n XYSeries.prototype.setYAxis = function (axis) {\r\n var oldAxis = this._yAxis.get();\r\n if (oldAxis != axis) {\r\n if (oldAxis) {\r\n this.dataItemsByAxis.removeKey(oldAxis.uid);\r\n // TODO why is this here ?\r\n this._yAxis.dispose();\r\n // temp @todo: why it is not disposed?\r\n oldAxis.series.removeValue(this);\r\n }\r\n this._yAxis.set(axis, axis.registerSeries(this));\r\n if (axis.chart instanceof XYChart) {\r\n axis.chart.handleYAxisSet(this);\r\n }\r\n this.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n this.invalidateData();\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"baseAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!this._baseAxis && xAxis && yAxis) {\r\n if (yAxis instanceof DateAxis) {\r\n this._baseAxis = yAxis;\r\n }\r\n if (xAxis instanceof DateAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n this._baseAxis = yAxis;\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n if (!this._baseAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n }\r\n return this._baseAxis;\r\n },\r\n /**\r\n * The main (base) axis.\r\n *\r\n * This is the axis that series fills will go to, or grow animations will\r\n * happen from.\r\n *\r\n * @param value Axis\r\n */\r\n set: function (value) {\r\n if (this._baseAxis != value) {\r\n this._baseAxis = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\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 XYSeries.prototype.addData = function (rawDataItem, removeCount, skipRaw) {\r\n _super.prototype.addData.call(this, rawDataItem, removeCount, skipRaw);\r\n var scrollbarSeries = this.scrollbarSeries;\r\n if (scrollbarSeries) {\r\n this.scrollbarSeries.addData(rawDataItem, removeCount, true);\r\n this.scrollbarSeries._parseDataFrom = this._parseDataFrom;\r\n }\r\n };\r\n XYSeries.prototype.setData = function (value) {\r\n _super.prototype.setData.call(this, value);\r\n if (this.scrollbarSeries) {\r\n this.scrollbarSeries.setData(value);\r\n }\r\n };\r\n /**\r\n * Makes the chart use particular data set.\r\n *\r\n * If `id` is not provided or there is no such data set, main data will be\r\n * used.\r\n *\r\n * @ignore\r\n * @since 4.7.0\r\n * @param id Data set id\r\n */\r\n XYSeries.prototype.setDataSet = function (id) {\r\n var changed = _super.prototype.setDataSet.call(this, id);\r\n if (changed) {\r\n this._dataSetChanged = true;\r\n var dataItems = this.dataItems;\r\n this.resetExtremes();\r\n if (dataItems && dataItems.length > 0) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n this._prevStartIndex = undefined;\r\n this._prevEndIndex = undefined;\r\n this._startIndex = undefined;\r\n this._endIndex = undefined;\r\n if (!this.appeared) {\r\n this.processValues(false); // this will slow down!\r\n }\r\n if (xAxis instanceof DateAxis && xAxis == this.baseAxis) {\r\n this._tmin.setKey(xAxis.uid, dataItems.getIndex(0).dateX.getTime());\r\n this._tmax.setKey(xAxis.uid, dataItems.getIndex(dataItems.length - 1).dateX.getTime());\r\n this.dispatch(\"extremeschanged\");\r\n }\r\n if (yAxis instanceof DateAxis && yAxis == this.baseAxis) {\r\n this._tmin.setKey(yAxis.uid, dataItems.getIndex(0).dateY.getTime());\r\n this._tmax.setKey(yAxis.uid, dataItems.getIndex(dataItems.length - 1).dateY.getTime());\r\n this.dispatch(\"extremeschanged\");\r\n }\r\n }\r\n }\r\n return changed;\r\n };\r\n /**\r\n * Processes values after data items' were added.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItems Data items\r\n */\r\n XYSeries.prototype.processValues = function (working) {\r\n _super.prototype.processValues.call(this, working);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!xAxis || !yAxis) {\r\n return;\r\n }\r\n var dataItems = this.dataItems;\r\n var minX = Infinity;\r\n var maxX = -Infinity;\r\n var minY = Infinity;\r\n var maxY = -Infinity;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var workingStartIndex = startIndex;\r\n var workingEndIndex = endIndex;\r\n if (!working) {\r\n startIndex = 0;\r\n endIndex = this.dataItems.length;\r\n }\r\n for (var i = startIndex; i < endIndex; i++) {\r\n var dataItem = dataItems.getIndex(i);\r\n this.getStackValue(dataItem, working);\r\n var stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n var stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n if (!working) {\r\n stackX = dataItem.getValue(\"valueX\", \"stackTrue\");\r\n stackY = dataItem.getValue(\"valueY\", \"stackTrue\");\r\n }\r\n minX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n minY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n maxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n maxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n // if it's stacked, pay attention to stack value\r\n if (this.stacked) {\r\n if (this.baseAxis == xAxis) {\r\n if (stackY < minY) {\r\n minY = stackY;\r\n }\r\n if (stackY > maxY) {\r\n maxY = stackY;\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (stackX < minX) {\r\n minX = stackX;\r\n }\r\n if (stackX > maxX) {\r\n maxX = stackX;\r\n }\r\n }\r\n }\r\n }\r\n // this is mainly for value axis to calculate total and perecent.total of each series category\r\n xAxis.processSeriesDataItems();\r\n yAxis.processSeriesDataItems();\r\n var xAxisId = xAxis.uid;\r\n var yAxisId = yAxis.uid;\r\n if (this.xAxis instanceof ValueAxis && (minX == Infinity || maxX == -Infinity)) {\r\n this._smin.setKey(xAxisId, undefined);\r\n this._smax.setKey(xAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this.yAxis instanceof ValueAxis && (minY == Infinity || maxY == -Infinity)) {\r\n this._smin.setKey(yAxisId, undefined);\r\n this._smax.setKey(yAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (!working) {\r\n if (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n this._tmin.setKey(xAxisId, minX);\r\n this._tmax.setKey(xAxisId, maxX);\r\n this._tmin.setKey(yAxisId, minY);\r\n this._tmax.setKey(yAxisId, maxY);\r\n var stackedSeries = this.stackedSeries;\r\n if (stackedSeries) {\r\n if (stackedSeries.isDisposed()) {\r\n this.stackedSeries = undefined;\r\n }\r\n else {\r\n stackedSeries.processValues(false);\r\n }\r\n }\r\n this.dispatchImmediately(\"extremeschanged\");\r\n }\r\n }\r\n if (startIndex != workingStartIndex || endIndex != workingEndIndex) {\r\n minX = Infinity;\r\n maxX = -Infinity;\r\n minY = Infinity;\r\n maxY = -Infinity;\r\n for (var i = workingStartIndex; i < workingEndIndex; i++) {\r\n var dataItem = dataItems.getIndex(i);\r\n this.getStackValue(dataItem, working);\r\n var stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n var stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n if (!working) {\r\n stackX = dataItem.getValue(\"valueX\", \"stackTrue\");\r\n stackY = dataItem.getValue(\"valueY\", \"stackTrue\");\r\n }\r\n minX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n minY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n maxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n maxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n // if it's stacked, pay attention to stack value\r\n if (this.stacked) {\r\n if (this.baseAxis == xAxis) {\r\n if (stackY < minY) {\r\n minY = stackY;\r\n }\r\n if (stackY > maxY) {\r\n maxY = stackY;\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (stackX < minX) {\r\n minX = stackX;\r\n }\r\n if (stackX > maxX) {\r\n maxX = stackX;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.xAxis instanceof ValueAxis && (minX == Infinity || maxX == -Infinity)) {\r\n this._smin.setKey(xAxisId, undefined);\r\n this._smax.setKey(xAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this.yAxis instanceof ValueAxis && (minY == Infinity || maxY == -Infinity)) {\r\n this._smin.setKey(yAxisId, undefined);\r\n this._smax.setKey(yAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n this._smin.setKey(xAxisId, minX);\r\n this._smax.setKey(xAxisId, maxX);\r\n this._smin.setKey(yAxisId, minY);\r\n this._smax.setKey(yAxisId, maxY);\r\n if (this.appeared || this.start != 0 || this.end != 1 || this.dataItems != this.mainDataSet) {\r\n /// new, helps to handle issues with change percent\r\n var changed = false;\r\n if (yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n var tmin = this._tmin.getKey(yAxisId);\r\n if (!$type.isNumber(tmin) || ((this.usesShowFields || this._dataSetChanged || (xAxis instanceof DateAxis && xAxis.groupData && this.isShowing)) && minY < tmin) || (this.stackedSeries && !this.isHidden && !working)) {\r\n this._tmin.setKey(yAxisId, minY);\r\n changed = true;\r\n }\r\n var tmax = this._tmax.getKey(yAxisId);\r\n if (!$type.isNumber(tmax) || ((this.usesShowFields || this._dataSetChanged || (xAxis instanceof DateAxis && xAxis.groupData && this.isShowing)) && maxY > tmax) || (this.stackedSeries && !this.isHidden && !working)) {\r\n this._tmax.setKey(yAxisId, maxY);\r\n changed = true;\r\n }\r\n }\r\n if (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis)) {\r\n var tmin = this._tmin.getKey(xAxisId);\r\n if (!$type.isNumber(tmin) || ((this.usesShowFields || this._dataSetChanged || (yAxis instanceof DateAxis && yAxis.groupData && this.isShowing)) && minX < tmin) || (this.stackedSeries && !this.isHidden && !working)) {\r\n this._tmin.setKey(xAxisId, minX);\r\n changed = true;\r\n }\r\n var tmax = this._tmax.getKey(xAxisId);\r\n if (!$type.isNumber(tmax) || ((this.usesShowFields || this._dataSetChanged || (yAxis instanceof DateAxis && yAxis.groupData && this.isShowing)) && maxX > tmax) || (this.stackedSeries && !this.isHidden && !working)) {\r\n this._tmax.setKey(xAxisId, maxX);\r\n changed = true;\r\n }\r\n }\r\n if (changed) {\r\n this.dispatchImmediately(\"extremeschanged\");\r\n }\r\n if (this.start == 0 && this.end == 1) {\r\n // yes, its ok. otherwise min/max won't be updated when zooming out\r\n this._dataSetChanged = false;\r\n }\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n }\r\n }\r\n if (!working && this.stacked) {\r\n this.processValues(true);\r\n }\r\n };\r\n /**\r\n * Hides element's [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n */\r\n XYSeries.prototype.hideTooltip = function (duration) {\r\n _super.prototype.hideTooltip.call(this, duration);\r\n this.returnBulletDefaultState();\r\n this._prevTooltipDataItem = undefined;\r\n };\r\n /**\r\n * Shows series tooltip at specific position.\r\n *\r\n * @param xPosition X\r\n * @param yPosition Y\r\n */\r\n XYSeries.prototype.showTooltipAtPosition = function (xPosition, yPosition) {\r\n var dataItem;\r\n if (this.visible && !this.isHiding && !this.isShowing) {\r\n var xAxis = this._xAxis.get();\r\n var yAxis = this._yAxis.get();\r\n if (xAxis == this.baseAxis) {\r\n dataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n }\r\n if (yAxis == this.baseAxis) {\r\n dataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n }\r\n var point = this.showTooltipAtDataItem(dataItem);\r\n if (point) {\r\n return point;\r\n }\r\n // so that if tooltip is shown on columns or bullets for it not to be hidden\r\n if (!this.tooltipText && !this.tooltipHTML) {\r\n return;\r\n }\r\n }\r\n this.hideTooltip();\r\n };\r\n XYSeries.prototype.getAdjustedXLocation = function (dataItem, field, bulletLocationX) {\r\n return dataItem.locations[field];\r\n };\r\n XYSeries.prototype.getAdjustedYLocation = function (dataItem, field, bulletLocationY) {\r\n return dataItem.locations[field];\r\n };\r\n /**\r\n * Shows series tooltip at specific dataItem.\r\n *\r\n * @param dataItem\r\n */\r\n XYSeries.prototype.showTooltipAtDataItem = function (dataItem) {\r\n var e_1, _a;\r\n var cursor = this.chart.cursor;\r\n if (cursor && cursor.hideSeriesTooltipsOnSelection && cursor.selection.visible && cursor.downPoint) {\r\n this.hideTooltip();\r\n return;\r\n }\r\n this.returnBulletDefaultState(dataItem);\r\n if (dataItem && dataItem.visible) {\r\n this.updateLegendValue(dataItem);\r\n if (this.cursorTooltipEnabled) {\r\n this.tooltipDataItem = dataItem;\r\n // todo: add tooltipXField and tooltipYField.\r\n var tooltipXField = this.tooltipXField;\r\n var tooltipYField = this.tooltipYField;\r\n if ($type.hasValue(dataItem[tooltipXField]) && $type.hasValue(dataItem[tooltipYField])) {\r\n var tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, this.getAdjustedXLocation(dataItem, tooltipXField), this.getAdjustedYLocation(dataItem, tooltipYField));\r\n if (tooltipPoint) {\r\n if (this.chart.className == \"XYChart\" && (tooltipPoint.y < -1 || tooltipPoint.y > this.yAxis.pixelHeight + 1 || tooltipPoint.x < -1 || tooltipPoint.x > this.xAxis.pixelWidth + 1)) {\r\n // void\r\n }\r\n else {\r\n this.tooltipX = tooltipPoint.x;\r\n this.tooltipY = tooltipPoint.y;\r\n if (this._prevTooltipDataItem != dataItem) {\r\n this.dispatchImmediately(\"tooltipshownat\", {\r\n type: \"tooltipshownat\",\r\n target: this,\r\n dataItem: dataItem\r\n });\r\n this._prevTooltipDataItem = dataItem;\r\n }\r\n if (this.cursorHoverEnabled) {\r\n try {\r\n for (var _b = __values(dataItem.sprites), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var sprite = _c.value;\r\n if (!sprite.parent.visible || sprite.isHidden || sprite.__disabled || sprite.disabled || sprite.isHiding) {\r\n }\r\n else {\r\n if (!sprite.interactions.isRealHover) {\r\n sprite.dispatchImmediately(\"over\");\r\n sprite.interactions.isRealHover = true;\r\n }\r\n sprite.isHover = true;\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n if (this.showTooltip()) {\r\n return $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this.updateLegendValue(dataItem, true);\r\n }\r\n };\r\n /**\r\n * Returns default state to bullets when tooltip is shown at some other data\r\n * item or hidden\r\n */\r\n XYSeries.prototype.returnBulletDefaultState = function (dataItem) {\r\n var e_2, _a;\r\n if (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n try {\r\n for (var _b = __values(this._prevTooltipDataItem.sprites), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var sprite = _c.value;\r\n if (!sprite.isDisposed()) {\r\n var fireEvent = sprite.interactions.isRealHover;\r\n sprite.isHover = false;\r\n if (fireEvent) {\r\n sprite.dispatchImmediately(\"out\");\r\n }\r\n }\r\n else {\r\n this._prevTooltipDataItem = undefined;\r\n }\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n }\r\n };\r\n XYSeries.prototype.shouldCreateBullet = function (dataItem, bulletTemplate) {\r\n // use series xField/yField if bullet doesn't have fields set\r\n var xField = bulletTemplate.xField;\r\n if (!$type.hasValue(xField)) {\r\n xField = this.xField;\r\n }\r\n var yField = bulletTemplate.yField;\r\n if (!$type.hasValue(yField)) {\r\n yField = this.yField;\r\n }\r\n if ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n return false;\r\n }\r\n if (bulletTemplate.disabled) {\r\n var disabledField = bulletTemplate.propertyFields.disabled;\r\n var dataContext = dataItem.dataContext;\r\n if (dataContext && dataContext[disabledField] === false) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.updateTooltip = function () {\r\n if (!this.hideTooltipWhileZooming && this.tooltip && !this.tooltip.isHidden && !this.isHiding && !this.isHidden && this.tooltipDataItem) {\r\n this.showTooltipAtDataItem(this.tooltipDataItem);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n // use series xField/yField if bullet doesn't have fields set\r\n var xField = bullet.xField;\r\n if (!$type.hasValue(xField)) {\r\n xField = this.xField;\r\n }\r\n var yField = bullet.yField;\r\n if (!$type.hasValue(yField)) {\r\n yField = this.yField;\r\n }\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if ((xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n bullet.visible = false;\r\n }\r\n else {\r\n var bulletLocationX = this.getBulletLocationX(bullet, xField);\r\n var bulletLocationY = this.getBulletLocationY(bullet, yField);\r\n var point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n if (point) {\r\n var xOpenField = this.xOpenField;\r\n var yOpenField = this.yOpenField;\r\n var positionX = void 0;\r\n var positionY = void 0;\r\n if (xAxis instanceof DateAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(xField);\r\n if (!xOpenField) {\r\n if (xAxis == this.baseAxis) {\r\n openValue = xAxis.baseValue;\r\n }\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(xOpenField);\r\n }\r\n if (!$type.isNumber(openValue)) {\r\n openValue = closeValue;\r\n }\r\n var stack = dataItem.getValue(\"valueX\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n if (openValue == closeValue) {\r\n var baseInterval = xAxis.baseInterval;\r\n var dateFormatter = xAxis.dateFormatter;\r\n openValue = $time.round(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.firstDayOfWeek, dateFormatter.utc, undefined, dateFormatter.timezoneMinutes, dateFormatter.timezone).getTime();\r\n closeValue = $time.add(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.utc).getTime();\r\n }\r\n var middleValue = void 0;\r\n if (xAxis == this.baseAxis) {\r\n middleValue = openValue + (closeValue - openValue) * bulletLocationX;\r\n }\r\n else {\r\n middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n }\r\n positionX = xAxis.valueToPosition(middleValue);\r\n }\r\n else if (xAxis instanceof ValueAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(xField);\r\n if (!xOpenField) {\r\n openValue = xAxis.baseValue;\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(xOpenField);\r\n }\r\n var stack = dataItem.getValue(\"valueX\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n var middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n positionX = xAxis.valueToPosition(middleValue);\r\n }\r\n else if (xAxis instanceof CategoryAxis) {\r\n var rightLocation = this.getAdjustedXLocation(dataItem, xField, bullet.locationX);\r\n var leftLocation = this.getAdjustedXLocation(dataItem, xOpenField, bullet.locationX);\r\n positionX = xAxis.categoryToPosition(dataItem[xField], rightLocation);\r\n var openPositionX = void 0;\r\n if (xOpenField) {\r\n openPositionX = xAxis.categoryToPosition(dataItem[xOpenField], leftLocation);\r\n }\r\n if (!$type.isNumber(openPositionX)) {\r\n openPositionX = 1;\r\n }\r\n positionX = openPositionX + (positionX - openPositionX) * bulletLocationX;\r\n }\r\n if (yAxis instanceof DateAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(yField);\r\n if (!yOpenField) {\r\n if (yAxis == this.baseAxis) {\r\n openValue = yAxis.baseValue;\r\n }\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(yOpenField);\r\n }\r\n if (!$type.isNumber(openValue)) {\r\n openValue = closeValue;\r\n }\r\n var stack = dataItem.getValue(\"valueY\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n if (openValue == closeValue) {\r\n var baseInterval = yAxis.baseInterval;\r\n var dateFormatter = yAxis.dateFormatter;\r\n openValue = $time.round(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.firstDayOfWeek, dateFormatter.utc, undefined, dateFormatter.timezoneMinutes, dateFormatter.timezone).getTime();\r\n closeValue = $time.add(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.utc).getTime();\r\n }\r\n var middleValue = void 0;\r\n if (yAxis == this.baseAxis) {\r\n middleValue = openValue + (closeValue - openValue) * bulletLocationY;\r\n }\r\n else {\r\n middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n }\r\n positionY = yAxis.valueToPosition(middleValue);\r\n }\r\n else if (yAxis instanceof ValueAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(yField);\r\n if (!yOpenField) {\r\n openValue = yAxis.baseValue;\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(yOpenField);\r\n }\r\n var stack = dataItem.getValue(\"valueY\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n var middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n positionY = yAxis.valueToPosition(middleValue);\r\n }\r\n else if (yAxis instanceof CategoryAxis) {\r\n positionY = yAxis.categoryToPosition(dataItem[yField], bulletLocationY);\r\n var topLocation = this.getAdjustedYLocation(dataItem, yField, bullet.locationY);\r\n var bottomLocation = this.getAdjustedYLocation(dataItem, yOpenField, bullet.locationY);\r\n positionY = yAxis.categoryToPosition(dataItem[yField], topLocation);\r\n var openPositionY = void 0;\r\n if (yOpenField) {\r\n openPositionY = yAxis.categoryToPosition(dataItem[yOpenField], bottomLocation);\r\n }\r\n if (!$type.isNumber(openPositionY)) {\r\n openPositionY = 1;\r\n }\r\n positionY = openPositionY + (positionY - openPositionY) * bulletLocationY;\r\n }\r\n bullet.visible = true;\r\n this.positionBulletReal(bullet, positionX, positionY);\r\n }\r\n else {\r\n bullet.visible = false;\r\n }\r\n }\r\n };\r\n XYSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n bullet.x = this.xAxis.renderer.positionToPoint(positionX, positionY).x;\r\n bullet.y = this.yAxis.renderer.positionToPoint(positionY, positionX).y;\r\n };\r\n /**\r\n * returns bullet x location\r\n * @ignore\r\n */\r\n XYSeries.prototype.getBulletLocationX = function (bullet, field) {\r\n var bulletLocation = bullet.locationX;\r\n var dataItem = bullet.dataItem;\r\n if (!$type.isNumber(bulletLocation)) {\r\n bulletLocation = dataItem.workingLocations[field];\r\n }\r\n return bulletLocation;\r\n };\r\n /**\r\n * Returns bullet x location\r\n * @ignore\r\n */\r\n XYSeries.prototype.getBulletLocationY = function (bullet, field) {\r\n var bulletLocation = bullet.locationY;\r\n var dataItem = bullet.dataItem;\r\n if (!$type.isNumber(bulletLocation)) {\r\n bulletLocation = dataItem.workingLocations[field];\r\n }\r\n return bulletLocation;\r\n };\r\n /**\r\n * This method must be called if you update Series' data fields that might\r\n * affect stacking of the series.\r\n *\r\n * Since individual `dataField` changes are not being monitored, you need\r\n * todo it manually for changes to take affect.\r\n *\r\n * @since 4.7.21\r\n */\r\n XYSeries.prototype.updateStacking = function () {\r\n var _this = this;\r\n this.invalidateDataItems();\r\n if (this.chart) {\r\n this.chart.series.each(function (series) {\r\n if (series.baseAxis == _this.baseAxis) {\r\n series.stackedSeries = undefined;\r\n series.invalidateDataItems();\r\n series.invalidateProcessedData();\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"stacked\", {\r\n /**\r\n * @return Can be stacked?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"stacked\");\r\n },\r\n /**\r\n * Can items from this series be included into stacks?\r\n *\r\n * Note: proper stacking is only possible if series have the same number\r\n * of data items. To ensure this, don't set data directly on series\r\n * but do this on chart instead.\r\n *\r\n * @default false\r\n * @param stacked Can be stacked?\r\n */\r\n set: function (stacked) {\r\n if (this.setPropertyValue(\"stacked\", stacked, true)) {\r\n this.updateStacking();\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!stacked) {\r\n var field_1;\r\n if (xAxis != this.baseAxis && xAxis instanceof ValueAxis) {\r\n field_1 = this.xField;\r\n }\r\n if (yAxis != this.baseAxis && yAxis instanceof ValueAxis) {\r\n field_1 = this.yField;\r\n }\r\n if (field_1) {\r\n this.dataItems.each(function (dataItem) {\r\n dataItem.setCalculatedValue(field_1, 0, \"stack\");\r\n dataItem.setCalculatedValue(field_1, 0, \"stackTrue\");\r\n });\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"snapTooltip\", {\r\n /**\r\n * @return Should snap?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"snapTooltip\");\r\n },\r\n /**\r\n * Should the nearest tooltip be shown if no data item is found on the\r\n * current cursor position? In order this to work, you should set snapTooltip = false on the series baseAxis.\r\n *\r\n * @default false\r\n * @param value Should snap?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"snapTooltip\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Duration of reveal animation (ms)\r\n * @return Animation\r\n */\r\n XYSeries.prototype.show = function (duration) {\r\n var _this = this;\r\n if (this.isHidden) {\r\n if (this.appeared && this.xAxis instanceof DateAxis && this.xAxis.groupData) {\r\n this._tmin.setKey(this.yAxis.uid, undefined);\r\n this._tmax.setKey(this.yAxis.uid, undefined);\r\n }\r\n if (this.appeared && this.yAxis instanceof DateAxis && this.yAxis.groupData) {\r\n this._tmin.setKey(this.xAxis.uid, undefined);\r\n this._tmax.setKey(this.xAxis.uid, undefined);\r\n }\r\n }\r\n var fields;\r\n if (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n fields = this._xValueFields;\r\n }\r\n if (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n fields = this._yValueFields;\r\n }\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var delay = 0;\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var anim;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n var realDuration = interpolationDuration;\r\n if (i < _this.startIndex - 10 || i > _this.endIndex + 10) {\r\n realDuration = 0;\r\n delay = 0;\r\n }\r\n if (_this.sequencedInterpolation && realDuration > 0) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n anim = dataItem.show(realDuration, delay, fields);\r\n });\r\n // other data sets\r\n this.dataSets.each(function (key, dataSet) {\r\n if (dataSet != _this.dataItems) {\r\n dataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.show(0, 0, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n });\r\n if (this.mainDataSet != this.dataItems) {\r\n this.mainDataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.show(0, 0, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n var animation = _super.prototype.show.call(this, duration);\r\n if (anim && !anim.isFinished()) {\r\n animation = anim;\r\n }\r\n if (this.hidden) {\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n this.hidden = false;\r\n }\r\n return animation;\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of hiding animation (ms)\r\n * @return Animation\r\n */\r\n XYSeries.prototype.hide = function (duration) {\r\n var _this = this;\r\n var fields;\r\n var value;\r\n var xAxis = this.xAxis;\r\n if (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n fields = this._xValueFields;\r\n // animate to zero if 0 is within zoomMin/zoomMax\r\n if (this.stacked || (xAxis.minZoomed < xAxis.baseValue && xAxis.maxZoomed > xAxis.baseValue) || this.stackedSeries) {\r\n value = xAxis.baseValue;\r\n }\r\n else {\r\n value = xAxis.min;\r\n }\r\n }\r\n var yAxis = this.yAxis;\r\n if (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n fields = this._yValueFields;\r\n // animate to zero if 0 is within zoomMin/zoomMax\r\n if (this.stacked || (yAxis.minZoomed < yAxis.baseValue && yAxis.maxZoomed > yAxis.baseValue) || this.stackedSeries) {\r\n value = yAxis.baseValue;\r\n }\r\n else {\r\n value = yAxis.min;\r\n }\r\n }\r\n //if ($type.hasValue(fields)) {\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var interpolationDuration = this.hiddenState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var delay = 0;\r\n var anim;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n var realDuration = interpolationDuration;\r\n if (i < _this.startIndex - 10 || i > _this.endIndex + 10) {\r\n realDuration = 0;\r\n }\r\n if (realDuration == 0) {\r\n dataItem.hide(0, 0, value, fields);\r\n }\r\n else {\r\n if (_this.sequencedInterpolation && realDuration > 0) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n anim = dataItem.hide(realDuration, delay, value, fields);\r\n }\r\n });\r\n // other data sets\r\n this.dataSets.each(function (key, dataSet) {\r\n if (dataSet != _this.dataItems) {\r\n dataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.hide(0, 0, value, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n });\r\n if (this.mainDataSet != this.dataItems) {\r\n this.mainDataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.hide(0, 0, value, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n var animation = _super.prototype.hide.call(this, interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n if (anim && !anim.isFinished()) {\r\n animation = anim;\r\n }\r\n if (this.appeared) {\r\n this.dispatch(\"selectionextremeschanged\");\r\n }\r\n // helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n this.validateDataElements();\r\n //}\r\n return animation;\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n _super.prototype.handleDataItemWorkingValueChange.call(this, dataItem, name);\r\n // to calculate stack values\r\n var axisSeries = this.baseAxis.series;\r\n $iter.each(axisSeries.iterator(), function (series) {\r\n if (series.stacked || series.stackedSeries) {\r\n series.invalidateProcessedData();\r\n }\r\n });\r\n };\r\n /**\r\n * [getStackValue description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n XYSeries.prototype.getStackValue = function (dataItem, working) {\r\n // todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n // if this series is not stacked or new stack begins, return.\r\n var _this = this;\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!this.stacked || !xAxis || !yAxis) {\r\n return;\r\n }\r\n else {\r\n // it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n var chart = this.chart;\r\n var index = chart.series.indexOf(this);\r\n var field_2;\r\n if (xAxis != this.baseAxis && xAxis instanceof ValueAxis) {\r\n field_2 = this.xField;\r\n }\r\n if (yAxis != this.baseAxis && yAxis instanceof ValueAxis) {\r\n field_2 = this.yField;\r\n }\r\n if (!field_2) {\r\n return;\r\n }\r\n //this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\t\t\t\r\n dataItem.setCalculatedValue(field_2, 0, \"stack\");\r\n dataItem.setCalculatedValue(field_2, 0, \"stackTrue\");\r\n $iter.eachContinue(chart.series.range(0, index).backwards().iterator(), function (prevSeries) {\r\n // stacking is only possible if both axes are the same\r\n if (prevSeries.xAxis == xAxis && prevSeries.yAxis == yAxis && prevSeries.className == _this.className) {\r\n // saving value\r\n prevSeries.stackedSeries = _this;\r\n var prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n if (prevDataItem && prevDataItem.hasValue(_this._xValueFields) && prevDataItem.hasValue(_this._yValueFields)) {\r\n var value = dataItem.getValue(field_2);\r\n var prevValue = void 0;\r\n var prevStack = prevDataItem.getValue(field_2, \"stackTrue\");\r\n if (prevStack == null) {\r\n prevStack = 0;\r\n }\r\n var prevRealValue = prevDataItem.getValue(field_2) + prevStack;\r\n prevValue = prevDataItem.getWorkingValue(field_2) + prevDataItem.getValue(field_2, \"stack\");\r\n if (_this.stackToNegative) {\r\n if ((value >= 0 && prevRealValue >= 0) || (value < 0 && prevRealValue < 0)) {\r\n dataItem.setCalculatedValue(field_2, prevValue, \"stack\");\r\n dataItem.setCalculatedValue(field_2, prevRealValue, \"stackTrue\");\r\n return false;\r\n }\r\n else if (!prevSeries.stacked) {\r\n return false;\r\n }\r\n }\r\n else {\r\n dataItem.setCalculatedValue(field_2, prevValue, \"stack\");\r\n dataItem.setCalculatedValue(field_2, prevRealValue, \"stackTrue\");\r\n return false;\r\n }\r\n }\r\n else if (!prevSeries.stacked) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"stackToNegative\", {\r\n /**\r\n * @return Stack to base line\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"stackToNegative\");\r\n },\r\n /**\r\n * This setting indicates how negative values are treated in stacked stacked\r\n * series.\r\n *\r\n * If set to `true` (default), negative values will stack on the base line.\r\n *\r\n * If set to `false`, negative value will stack in relation to the previous\r\n * value in the stack.\r\n *\r\n * @since 4.9.34\r\n * @param value Stack to base line\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"stackToNegative\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"xField\", {\r\n /**\r\n * [xField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._xField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"yField\", {\r\n /**\r\n * [yField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._yField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"xOpenField\", {\r\n /**\r\n * [xOpenField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._xOpenField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"yOpenField\", {\r\n /**\r\n * [yOpenField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._yOpenField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"tooltipXField\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n if (this._tooltipXField) {\r\n return this._tooltipXField;\r\n }\r\n return this._xField;\r\n },\r\n /**\r\n * [tooltipXField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this._tooltipXField = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"tooltipYField\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n if (this._tooltipYField) {\r\n return this._tooltipYField;\r\n }\r\n return this._yField;\r\n },\r\n /**\r\n * [tooltipYField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this._tooltipYField = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns lowest value in the series for the specific axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.min = function (axis) {\r\n return this._tmin.getKey(axis.uid);\r\n };\r\n /**\r\n * Returns highest value in the series for the specific axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.max = function (axis) {\r\n return this._tmax.getKey(axis.uid);\r\n };\r\n /**\r\n * Returns lowest value in the series for the specific axis within current\r\n * selection.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.selectionMin = function (axis) {\r\n var value = this._smin.getKey(axis.uid);\r\n // not good, because bad if there are no items with values in selection\r\n //if (!$type.isNumber(value)) {\r\n //value = this.min(axis);\r\n //}\t\t\r\n return value;\r\n };\r\n /**\r\n * Returns highest value in the series for the specific axis within current\r\n * selection.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.selectionMax = function (axis) {\r\n var value = this._smax.getKey(axis.uid);\r\n // not good, because bad if there are no items with values in selection\r\n //if (!$type.isNumber(value)) {\r\n //value = this.max(axis);\r\n //}\r\n return value;\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 XYSeries.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up base axes\r\n if ($type.hasValue(config.baseAxis) && $type.isString(config.baseAxis)) {\r\n if (this.map.hasKey(config.baseAxis)) {\r\n config.baseAxis = this.map.getKey(config.baseAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.baseAxis + \"\\\" found for `baseAxis`.\");\r\n delete config.baseAxis;\r\n }\r\n }\r\n // Set up axes\r\n if ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n if (this.map.hasKey(config.xAxis)) {\r\n config.xAxis = this.map.getKey(config.xAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n delete config.xAxis;\r\n }\r\n }\r\n if ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n if (this.map.hasKey(config.yAxis)) {\r\n config.yAxis = this.map.getKey(config.yAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n delete config.yAxis;\r\n }\r\n }\r\n // Set up axis ranges\r\n if ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n for (var i = 0, len = config.axisRanges.length; i < len; i++) {\r\n var range = config.axisRanges[i];\r\n if (!$type.hasValue(range.type)) {\r\n range.type = \"AxisDataItem\";\r\n }\r\n if ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n range.component = this.map.getKey(range.axis);\r\n }\r\n else if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n range.component = this.map.getKey(range.component);\r\n }\r\n }\r\n }\r\n // Parse date fields based on the series fields\r\n if (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n this.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n XYSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (this.xAxis && this.yAxis) {\r\n var x = this.xAxis.getX(dataItem, xKey, locationX);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY);\r\n x = $math.fitToRange(x, -this._maxxX, this._maxxX); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y = $math.fitToRange(y, -this._maxxY, this._maxxY); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n return { x: x, y: y };\r\n }\r\n };\r\n /**\r\n * Updates item reader text based on the type and set up of axis.\r\n */\r\n XYSeries.prototype.updateItemReaderText = function () {\r\n // We do not want to overwrite this if `itemReaderText` was changed by\r\n // user code.\r\n if (this._itemReaderTextChanged) {\r\n return;\r\n }\r\n var text = \"\";\r\n $object.each(this.dataFields, function (key, val) {\r\n text += \"{\" + key + \"} \";\r\n });\r\n this.itemReaderText = text;\r\n this._itemReaderTextChanged = false;\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"cursorTooltipEnabled\", {\r\n /**\r\n * @return Display tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cursorTooltipEnabled\");\r\n },\r\n /**\r\n * Indicates if series should display a tooltip for chart's cursor.\r\n *\r\n * If set to `true` (default), the tooltips set for all series item's\r\n * elements like columns and bullets will be automatically shown\r\n * when [[XYCursor]] passes over category/date, even if its not hovered\r\n * directly over the item.\r\n *\r\n * Set this to `false` to disable such behavior and display item-specific\r\n * tooltips only when hovered directly over them\r\n *\r\n * @default true\r\n * @param value Display tooltip?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"cursorHoverEnabled\", {\r\n /**\r\n * @return Hover enabled?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cursorHoverEnabled\");\r\n },\r\n /**\r\n * Indicates if series should apply hover state on bullets/columns/etc when\r\n * cursor is over the data item.\r\n *\r\n * If set to `true` (default) and chart cursor is enabled on th chart,\r\n * hovering over date/category will trigger hover states on related Series\r\n * items like bullets and columns.\r\n *\r\n * @default true\r\n * @since 4.2.2\r\n * @param value Hover enabled?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cursorHoverEnabled\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"excludeFromTotal\", {\r\n /**\r\n * @return Exclude from totals?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"excludeFromTotal\");\r\n },\r\n /**\r\n * Indicates if series' values should be excluded when calculating totals.\r\n *\r\n * @default false\r\n * @since 4.4.9\r\n * @param value Exclude from totals?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"excludeFromTotal\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"hideTooltipWhileZooming\", {\r\n /**\r\n * @return Hide tooltip while zooming?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideTooltipWhileZooming\");\r\n },\r\n /**\r\n * Indicates if series' tooltip should be hidden while series axis range is\r\n * animating (zooming).\r\n *\r\n * @default true\r\n * @since 4.7.16\r\n * @param value Hide tooltip while zooming?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideTooltipWhileZooming\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"maskBullets\", {\r\n /**\r\n * @return Mask bullets?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maskBullets\");\r\n },\r\n /**\r\n * Indicates if series' bullets should be masked.\r\n *\r\n * @default true\r\n * @since 4.7.17\r\n * @param value Mask bullets?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maskBullets\", value);\r\n var chart = this.chart;\r\n if (chart) {\r\n if (value) {\r\n this.bulletsContainer.parent = chart.bulletsContainer;\r\n }\r\n else {\r\n this.bulletsContainer.parent = chart.axisBulletsContainer;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n XYSeries.prototype.copyFrom = function (source) {\r\n this.groupFields = $utils.copyProperties(source.groupFields, {});\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * Destroys this object and all related data.\r\n */\r\n XYSeries.prototype.dispose = function () {\r\n if (this.scrollbarSeries) {\r\n this.scrollbarSeries.dispose();\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n return XYSeries;\r\n}(Series));\r\nexport { XYSeries };\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[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n//# sourceMappingURL=XYSeries.js.map"],"names":["CandlestickSeriesDataItem","_super","_this","call","this","values","lowValueX","lowValueY","highValueX","highValueY","className","applyTheme","Object","defineProperty","prototype","get","value","set","setValue","enumerable","configurable","valueX","valueY","CandlestickSeries","groupFields","strokeOpacity","interfaceColors","positiveColor","getFor","negativeColor","dropFromOpenState","properties","fill","stroke","riseFromOpenState","applyInternalDefaults","readerTitle","language","translate","createDataItem","validateDataElementReal","dataItem","validateCandlestick","column","lowLine_1","lowLine","highLine_1","highLine","baseAxis","xAxis","x","pixelWidth","open_1","getWorkingValue","yOpenField","close_1","yField","yOpen","yAxis","getY","yClose","yLow","yLowField","yHigh","yHighField","pixelY","y1","y2","y","pixelHeight","open_2","xOpenField","close_2","xField","xOpen","getX","xClose","xLow","xLowField","xHigh","xHighField","pixelX","x1","x2","axisRanges","iterator","axisRange","rangeColumn","rangesColumns","getKey","uid","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","defineFields","yAxisFieldName","axisFieldName","xAxisFieldName","addValueField","_xValueFields","_yValueFields","createLegendMarker","marker","w","h","removeChildren","cw","ch","createChild","shouldClone","copyFrom","columns","template","width","height","legendDataItem","color","colorOrig","createColumnTemplate","ColumnSeriesDataItem","locations","_column","setColumn","sprites","prevDataItem","undefined","addSprite","_disposers","push","component","removeValue","_adapterO","apply","validateDataElement","_rangesColumns","ColumnSeries","_startLocation","_endLocation","fillOpacity","clustered","columnsContainer","mainContainer","isMeasured","layout","_columnsContainer","pixelPerfect","tooltipColorSource","validate","group","node","removeAttribute","chart","prevAxisIndex_1","baseAxisSeries","series","clusterCount_1","index_1","sortedByAxis_1","index_2","yAxes","indexOf","xAxes","axis","sort","a","b","sortedItem","stacked","renderer","cellStartLocation","cellEndLocation","sortBySeries","sortCategoryAxis","i","startIndex","dataItems","getIndex","disableUnusedColumns","length","endIndex","_propertiesChanged","key","workingValue","each","_index","currentPosition","categoryToPosition","category","deltaPosition","seriesDataItem","getSeriesDataItemByCategory","index","deltaAnimation","isDisposed","animationOptions","to","stop","animate","property","from","interpolationDuration","interpolationEasing","getStartLocation","startLocation","getEndLocation","endLocation","l","r","t","percentWidth","percentHeight","maxWidth","maxHeight","paddingLeft","pixelPaddingLeft","paddingRight","pixelPaddingRight","paddingTop","pixelPaddingTop","paddingBottom","pixelPaddingBottom","outOfBounds","diw","dih","hasValue","offset","Math","abs","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","dataFields","axisLenght","ceil","axisLength","rightLocation","leftLocation","column_1","min","create","paper","itemsFocusable","role","focusable","events","on","ev","populateString","itemReaderText","hoverable","parent","virtualParent","realX","realY","realWidth","realHeight","setColumnStates","invalid","__disabled","contents","setKey","itemWidth","itemHeight","sprite","_dropFromOpenState","_dropFromPreviousState","_riseFromOpenState","_riseFromPreviousState","change","getValue","droppedFromOpen","defaultState","setState","droppedFromPrevious","_columns","getPropertyValue","setPropertyValue","states","updateLegendValue","notRange","fromOpenState_1","fromPreviousState_1","children","child","padding","source","getBulletLocationX","bullet","field","bulletLocationX","locationX","getBulletLocationY","bulletLocationY","locationY","getAdjustedXLocation","getAdjustedYLocation","coordinate","minY","maxY","minX","maxX","disposeData","clear","ColumnSeries3DDataItem","ColumnSeries3D","column3D","applyOnClones","hiddenState","visible","leftAxesContainer","rightAxesContainer","bottomAxesContainer","topAxesContainer","dx","dy","validateDataElements","invalidateLayout","depth","angle","ConeSeriesDataItem","ConeSeries","getMaskPath","coneColumn","innerWidth","innerHeight","orientation","CurvedColumnSeriesDataItem","CurvedColumnSeries","curvedColumn","FunnelSeriesDataItem","invalidateDataItems","_sliceLink","sliceLink_1","sliceLinks","slicesContainer","FunnelSeries","_nextY","labelsOpposite","labelsContainer","bottomRatio","createSlice","createTick","initSlice","slice","scale","observe","handleSliceScale","handleSliceMove","tooltipText","hoverState","expandDistance","initLabel","label","verticalCenter","horizontalCenter","labelTemplate","labels","alignLabels","interactionsEnabled","total","count","dItem","ignoreZeroValues","isHiding","_total","_count","arrangeLabels","getNextValue","nextValue","nextItem","formDataElement","sliceLink","tick","decorateSlice","disabled","d","Infinity","linkHeight","topWidth","high","bottomWidth","linkWidth","measuredHeight","getLastLabel","lastLabel","lastY","lastX","measuredWidth","positionBullet","invalidate","ticks","rotation","_sliceLinks","opacity","show","duration","transitionDuration","delay","sequencedInterpolation","sequencedInterpolationDelay","animation","hide","fields","isFinished","setAlignLabels","margin","labelAlign","labelValign","toFront","toBack","align","valign","validateLayout","LineSeriesDataItem","LineSeries","minDistance","segments","createSegment","_segmentsIterator","createNewItems","connect","tensionX","tensionY","autoGapCount","smoothing","segmentsContainer","bulletsContainer","setInitialWorkingValues","_yAxis","_xAxis","appeared","previousDataItem","initialY","minZoomed","setWorkingValue","setWorkingLocation","dateX","initialX","dateY","categoryX","categoryY","segment","reset","openSegmentWrapper","_adjustedStartIndex","range","sliceData","findAdjustedIndex","len","_workingStartIndex","_workingEndIndex","adjustedIndex","propertyFields","openIndex","params","openSegment","getSegment","getFirst","addToClose","points","closeIndex","propertiesChanged","strokeDasharray","filters","valuesFound","hasProperties","updateSegmentProperties","addPoints","next","makeGap","closeSegment","backwards","point","getPoint","workingLocations","add","closePoints","_xOpenField","_yOpenField","basePoint","drawSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","toString","valueStr","disposeChildren","line","bullets","copyToLegendMarker","hasLabels","clone","LineSeriesSegment","fillSprite","setElement","strokeSprite","smoothnessX","smoothnessY","path","smooth","closed","lineElement","fillElement","OHLCSeriesDataItem","OHLCSeries","openLine_1","openLine","highLowLine_1","highLowLine","closeLine_1","closeLine","rangeOpenLine","rangeCloseLine","rangeHighLowLine","PercentSeriesDataItem","uidAttr","toValue","setVisibility","noChangeValues","setProperty","_legendDataItem","valueLabel","_tick","tick_1","ticksContainer","_label","label_1","_slice","component_1","slice_1","slices","hiddenInLegend","PercentSeries","_addAllDataItems","colors","step","calculatePercent","skipFocusThreshold","transitionEasing","createLabel","_slices","_ticks","initTick","_labels","text","validateDataItems","patterns","backgroundOpacity","currentStep","validateData","feedLegend","lh","nextLabel","getNextLabel","bottom","nextLabelHeight","nextLabelY","arrangeLabels2","previousTop","nextDataItem","addDisposer","isActive","event","target","legendSettings","labelText","itemLabelText","valueText","itemValueText","relevant","state","stateId","labelState","tickState","PictorialStackedSeriesDataItem","PictorialStackedSeries","valueIs","_maskSprite","zIndex","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","pyramidHeight","mask","hs","PieSeriesDataItem","radiusValue","PieSeries","radius","shiftRadius","togglable","hideTooltip","interactions","lastHitPointer","touch","isHover","activeState","_leftItems","_rightItems","_currentStartAngle","startAngle","_arcRect","endAngle","_maxRadiusPercent","radiusValuePercent","percent","reverse","aAngle","middleAngle","bAngle","pixelRadius","pixelInnerRadius","innerRadius","arc","normalizedMiddleAngle","labelRadius","arcRect","distance","iy","moveTo","fixPosition","radiusY","setPercentProperty","_pixelRadius","_pixelInnerRadius","_startAngleInternal","_endAngleInternal","fdx","fdy","definedBBox","PieSeries3DDataItem","depthValue","PieSeries3D","depthPercent","PyramidSeriesDataItem","PyramidSeries","_nextWidth","relValue","_pyramidHeight","_pyramidWidth","sum","absoluteSum","pyramidWidth","sliceTopWidth","atan2","c","tan","PI","sliceHeight","sliceBottomWidth","totalSquare","square","s","sqrt","max","sliceWidth","RadarColumnSeriesDataItem","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","end","start","radarColumn","getAngle","temp","xKey","yKey","stackKeyX","stackKeyY","positionBulletReal","positionX","positionY","positionToPoint","setXAxis","updateRendererRefs","setYAxis","rendererX","rendererY","axisRendererY","RadarSeriesDataItem","setLocation","RadarSeries","connectEnds","unshift","SeriesDataItem","_bullets","dispose","Series","_ignoreMinMax","_showBullets","_tmin","_tmax","_smin","_smax","dataItemsByAxis","_itemReaderTextChanged","usePercentHack","autoDispose","simplifiedProcessing","constructor","Error","processAxisRange","minBulletDistance","_shouldBeReady","tooltip","setClassName","_chart","processBullet","newValue","isTemplate","once","removeBullet","oldValue","eachBullet","processValues","getFirstValue","getActualWorkingValue","getAbsoluteFirstValue","rangeChangeUpdate","working","count_1","sum_1","absoluteSum_1","low_1","high_1","previous_1","first_1","absoluteFirst_1","startIndex_1","dataItem_1","_loop_1","dataItem_2","setCalculatedValue","prevValue","_loop_2","dataItem_3","ksum","zeroItem_1","dataItem_4","updateTooltipBounds","topParent","rect","setBounds","shouldCreateBullet","bulletTemplate","isHidden","disabledField","dataContext","currentDataItem","readerText_1","isDynamic","deepInvalidate","handleDataItemWorkingValueChange","name","dataRangeInvalid","invalidateProcessedData","createMask","rangesContainer","isRange","getAxisField","showTooltipAtPosition","xPosition","yPosition","invalidateRawData","readerText","_itemReaderText","tooltipHTML","itemContainer","raiseCriticalError","e","modal","content","adapter","message","closable","open","console","log","applyFilters","filter","_heatRules","heatRule","dataField_1","dataField","seriesDataItem_1","property_1","minValue","maxValue","foundSprite","clonedFrom","anySprite","anyChild","foundSprite_1","ruleTarget","propertyField","low","fieldValues","logarithmic","LOG10E","rgb","processConfig","config","heatRules","type","rule","map","hasKey","parts","split","listitem","maybeIndex","match","maybeColorOrPercent","configOrder","StepLineSeriesSegment","noRisers","vertical","round","StepLineSeriesDataItem","StepLineSeries","startLocationX","endLocationX","startLocationY","endLocationY","x0","y0","prevPoint","point0","point1","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries","configField","openValueX","openValueY","showOnInit","processDataItem","preventShow","showReal","hideReal","dataChangeUpdate","XYSeriesDataItem","customValue","stack","openDateX","openDateY","getDate","date","setDate","categories","setCategory","openCategoryX","openCategoryY","getMin","stackValue","getMax","XYSeries","_baseInterval","dataGrouped","usesShowFields","_dataSetChanged","_maxxX","_maxxY","outOfRange","cursorTooltipEnabled","cursorHoverEnabled","excludeFromTotal","snapTooltip","pointerOrientation","stackToNegative","hideTooltipWhileZooming","returnBulletDefaultState","inited","childrenCreated","legend","resetExtremes","_currentDataSetId","seriesDataChangeUpdate","valueYShow","openValueXShow","openValueYShow","data","updateItemReaderText","_xField","_yField","processSeriesDataItem","updateDataItem","dataItemsX","clearCatAxis","dataItemsY","seriesDataItems","setCategoryAxisField","setDateAxisField","afterDraw","path_1","axisFill","fillPath","plotContainer","updateAxisBySeries","postProcessSeriesDataItems","validateDataRange","updateTooltip","groupData","maskBullets","gridContainer","oldAxis","removeKey","registerSeries","invalidateData","handleYAxisSet","_baseAxis","addData","rawDataItem","removeCount","skipRaw","scrollbarSeries","_parseDataFrom","setData","setDataSet","id","_prevStartIndex","_prevEndIndex","_startIndex","_endIndex","getTime","dispatch","workingStartIndex","workingEndIndex","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","dispatchImmediately","stackedSeries","mainDataSet","tmin","isShowing","tmax","_prevTooltipDataItem","getSeriesDataItem","toAxisPosition","showTooltipAtDataItem","e_1","_a","cursor","hideSeriesTooltipsOnSelection","selection","downPoint","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","tooltipX","tooltipY","_b","_c","done","isRealHover","e_1_1","error","return","showTooltip","e_2","fireEvent","e_2_1","openValue","closeValue","baseValue","baseInterval","dateFormatter","Date","timeUnit","firstDayOfWeek","utc","timezoneMinutes","timezone","middleValue","valueToPosition","openPositionX","openPositionY","bulletLocation","updateStacking","field_1","anim","realDuration","dataSets","dataSet","disable","enable","hidden","maxZoomed","axisSeries","field_2","prevSeries","prevStack","prevRealValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processingErrors","val","axisBulletsContainer"],"sourceRoot":""}