{"version":3,"sources":["webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/Legend.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Bullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/SerialChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/Grip.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/Chart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/Series.js"],"names":["LegendDataItem","_super","_this","call","this","childrenCreated","className","applyTheme","Object","defineProperty","prototype","get","_label","label_1","component","labels","create","addSprite","_disposers","push","parent","itemContainer","removeValue","enumerable","configurable","properties","color","set","value","setProperty","_valueLabel","valueLabel_1","valueLabels","_itemContainer","component_1","itemContainer_1","itemContainers","togglable","events","on","ev","toggleDataItem","target","dataItem","undefined","focusable","focusedItem","dataContext","uidAttr","readerControls","readerLabelledBy","sprite","isDisposed","visibilitychanged","readerChecked","visible","disableType","isActive","enableType","addDisposer","dataItems","remove","_marker","marker_1","markers","LegendSettings","createMarker","Legend","layout","setPropertyValue","applyOnClones","padding","margin","clickable","role","cursorOverStyle","pointer","background","fillOpacity","template","body","isKey","event","isEnabled","dispatchImmediately","interfaceColors","marker","width","height","interactionsEnabled","setStateOnChildren","strokeOpacity","propertyFields","fill","valign","disabledColor","getFor","child","newValue","activeState","states","stroke","rectangle","createChild","label","text","truncate","fullWords","valueLabel","align","textAlign","position","handleScrollbar","applyInternalDefaults","readerTitle","language","translate","createDataItem","validateDataElements","scrollbar","start","end","validateDataElement","container","legendDataItem","tempMaxWidth","maxWidth","legendSettings","createLegendMarker","useDefaultMarker","updateLegendValue","invalid","validate","__disabled","itemValueText","valueText","setState","afterDraw","getPropertyValue","maxLabelWidth","each","measuredWidth","pixelMarginLeft","pixelMarginRight","maxValueLabelWidth","maxMarkerWidth","maxAdjustedLabelWidth","trueMaxWidth","Math","min","scrollable","measuredHeight","x","pixelWidth","contentHeight","thumb","paddingRight","updateMasks","contentAlign","maxColumns","invalidate","isMeasured","orientation","endGrip","startGrip","marginLeft","_mouseWheelDisposer","handleWheel","dispose","shift","y","ds","delta","dy","pixelY","maskRectangle","item","isHiding","isHidden","colorOrig","appeared","hidden","show","svgContainer","readerAlert","locale","hide","handleDataItemPropertyChange","name","registeredClasses","relevant","widthXS","state","stateId","heightXS","isXS","disabled","Bullet","tooltipX","tooltipY","copyToLegendMarker","SerialChartDataItem","SerialChart","colors","_usesData","seriesContainer","chartContainer","shouldClone","zIndex","bulletsContainer","patterns","_series","createSeries","handleSeriesAdded","handleSeriesRemoved","series","oldValue","dataUsers","dataUser","invalidateDataItems","autoDispose","legend","i","length","getIndex","data","di","chart","_dataUsers","moveValue","handleSeriesAdded2","handleLegendSeriesAdded","hiddenInLegend","addData","dataInvalid","once","showOnInit","reinit","_data","feedLegend","legendData_1","iterator","dataFields","copyFrom","source","appear","inited","Grip","cs","InterfaceColorSet","cornerRadius","icon","Sprite","element","paper","add","path","strokeWidth","pixelPerfect","autoHideDelay","_autoHideTimeout","setTimeout","horizontalCenter","verticalCenter","rotation","Button","ChartDataItem","DataItem","Chart","_legend","constructor","Error","Label","titles","List","chartAndLegendContainer","Container","processTitle","updateReaderTitleReferences","defaultState","transitionDuration","draw","fixLayout","toBack","toFront","title","titleIds_1","uid","setSVGAttribute","join","removeSVGAttribute","setLegend","property","Disposer","reset","processConfig","config","type","clone","removeChildren","_dragGrip","grip_1","tooltipContainer","touch","Component","Responsive","pixelPaddingLeft","paddingLeft","pixelPaddingRight","pixelPaddingTop","paddingTop","pixelPaddingBottom","paddingBottom","widthXXS","heightXXS","SeriesDataItem","values","_bullets","bullets","clear","setValue","Series","_ignoreMinMax","_showBullets","_tmin","_tmax","_smin","_smax","dataItemsByAxis","skipFocusThreshold","_itemReaderTextChanged","calculatePercent","usePercentHack","simplifiedProcessing","axisRanges","processAxisRange","minBulletDistance","mainContainer","mask","_shouldBeReady","virtualParent","tooltip","hiddenState","transitionEasing","autoSetClassName","setClassName","_chart","positionBullet","bullet","processBullet","isTemplate","itemsFocusable","removeBullet","eachBullet","getKey","validateDataItems","processValues","getFirstValue","key","startIndex","getActualWorkingValue","getAbsoluteFirstValue","rangeChangeUpdate","working","count_1","sum_1","absoluteSum_1","low_1","high_1","open_1","close_1","previous_1","first_1","absoluteFirst_1","startIndex_1","endIndex","dataItem_1","_loop_1","dataItem_2","abs","setCalculatedValue","prevValue","_loop_2","dataItem_3","ksum","percent","zeroItem_1","dataItem_4","filters","axisRange","pixelX","children","updateTooltipBounds","topParent","w","h","maxHeight","rect","setBounds","shouldCreateBullet","bulletTemplate","disabledField","currentDataItem","setKey","readerText_1","itemReaderText","xField","yField","isDynamic","deepInvalidate","populateString","hoverable","itemWidth","itemHeight","handleDataItemWorkingValueChange","dataRangeInvalid","invalidateProcessedData","createMask","rangesContainer","contents","isRange","getAxisField","axis","showTooltipAtPosition","xPosition","yPosition","invalidateRawData","readerText","_itemReaderText","tooltipText","tooltipHTML","_adapterO","apply","_legendDataItem","notRange","itemLabelText","labelText","raiseCriticalError","e","modal","content","adapter","message","closable","suppressErrors","open","verbose","console","log","applyFilters","filter","_heatRules","heatRule","dataField_1","dataField","seriesDataItem_1","property_1","minValue","maxValue","foundSprite","sprites","clonedFrom","anySprite","anyChild","foundSprite_1","ruleTarget","max","propertyField","low","high","fieldValues","workingValue","logarithmic","LOG10E","Infinity","rgb","heatRules","len","rule","map","hasKey","parts","split","listitem","maybeIndex","match","maybeColorOrPercent","configOrder","a","b","setVisibility"],"mappings":"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","file":"js/chunk-ed7daa1e.b880c57d.js","sourcesContent":["/**\r\n * Legend-related functionality.\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 { DataItem } from \"../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../core/utils/List\";\r\nimport { RoundedRectangle } from \"../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../core/Container\";\r\nimport { Label } from \"../core/elements/Label\";\r\nimport { keyboard } from \"../core/utils/Keyboard\";\r\nimport { registry } from \"../core/Registry\";\r\nimport { getInteraction } from \"../core/interaction/Interaction\";\r\nimport { percent, Percent } from \"../core/utils/Percent\";\r\nimport { InterfaceColorSet } from \"../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../core/utils/Utils\";\r\nimport * as $type from \"../core/utils/Type\";\r\nimport * as $math from \"../core/utils/Math\";\r\nimport { Sprite } from \"../core/Sprite\";\r\nimport { Disposer } from \"../core/utils/Disposer\";\r\nimport { MouseCursorStyle } from \"../core/interaction/Mouse\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../core/utils/Responsive\";\r\nimport { Scrollbar } from \"../core/elements/Scrollbar\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[Legend]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar LegendDataItem = /** @class */ (function (_super) {\r\n __extends(LegendDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LegendDataItem() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * @ignore\r\n */\r\n _this.childrenCreated = false;\r\n _this.className = \"LegendDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(LegendDataItem.prototype, \"label\", {\r\n /**\r\n * A legend item's [[Label]] element.\r\n *\r\n * @return Label\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._label = label_1;\r\n this.addSprite(label_1);\r\n this._disposers.push(label_1);\r\n label_1.parent = this.itemContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if ($type.hasValue(_this.component)) {\r\n _this.component.labels.removeValue(label_1);\r\n }\r\n }));\r\n }\r\n return this._label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LegendDataItem.prototype, \"color\", {\r\n /**\r\n * @return Main color\r\n */\r\n get: function () {\r\n return this.properties.color;\r\n },\r\n /**\r\n * Main color of legend data item.\r\n *\r\n * This is set by the target element this legend item represents, like\r\n * a Series or a Slice.\r\n *\r\n * It can be used to derive a color in legend's sub-items, like label:\r\n *\r\n * ```TypeScript\r\n * chart.legend.labels.template.text = \"[{color}]{name}[/]\";\r\n * ```\r\n * ```JavaScript\r\n * chart.legend.labels.template.text = \"[{color}]{name}[/]\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"legend\": {\r\n * // ...\r\n * \"labels\": {\r\n * \"text\": \"[{color}]{name}[/]\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/#Legend_labels} For more information about configuring legend labels.\r\n * @param value Main color\r\n */\r\n set: function (value) {\r\n this.setProperty(\"color\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LegendDataItem.prototype, \"valueLabel\", {\r\n /**\r\n * A legend item's [[Label]] element for \"value label\".\r\n *\r\n * @return Label\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._valueLabel) {\r\n var valueLabel_1 = this.component.valueLabels.create();\r\n this._valueLabel = valueLabel_1;\r\n this.addSprite(valueLabel_1);\r\n this._disposers.push(valueLabel_1);\r\n valueLabel_1.parent = this.itemContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if ($type.hasValue(_this.component)) {\r\n _this.component.valueLabels.removeValue(valueLabel_1);\r\n }\r\n }));\r\n }\r\n return this._valueLabel;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LegendDataItem.prototype, \"itemContainer\", {\r\n /**\r\n * A reference to the main [[Container]] that holds legend item's elements:\r\n * marker and labels.\r\n *\r\n * @return Item container\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._itemContainer) {\r\n var component_1 = this.component;\r\n var itemContainer_1 = component_1.itemContainers.create();\r\n itemContainer_1.parent = component_1;\r\n this._itemContainer = itemContainer_1;\r\n this.addSprite(itemContainer_1);\r\n this._disposers.push(itemContainer_1);\r\n // Add click/tap event to toggle item\r\n if (itemContainer_1.togglable) {\r\n itemContainer_1.events.on(\"toggled\", function (ev) {\r\n component_1.toggleDataItem(ev.target.dataItem);\r\n }, undefined, false);\r\n }\r\n // Add focus event so that we can track which object is currently in focus\r\n // for keyboard toggling\r\n if (itemContainer_1.focusable) {\r\n itemContainer_1.events.on(\"hit\", function (ev) {\r\n // We need this here in order to reset focused item when it is clicked\r\n // normally so that it is not toggled by ENTER afterwards\r\n component_1.focusedItem = undefined;\r\n }, undefined, false);\r\n itemContainer_1.events.on(\"focus\", function (ev) {\r\n component_1.focusedItem = ev.target.dataItem;\r\n }, undefined, false);\r\n itemContainer_1.events.on(\"blur\", function (ev) {\r\n component_1.focusedItem = undefined;\r\n }, undefined, false);\r\n }\r\n this._disposers.push(new Disposer(function () {\r\n if ($type.hasValue(_this.component)) {\r\n _this.component.itemContainers.removeValue(itemContainer_1);\r\n }\r\n }));\r\n if (this.dataContext.uidAttr) {\r\n itemContainer_1.readerControls = this.dataContext.uidAttr();\r\n itemContainer_1.readerLabelledBy = this.dataContext.uidAttr();\r\n }\r\n var sprite = this.dataContext;\r\n if ((sprite instanceof DataItem || sprite instanceof Sprite) && !sprite.isDisposed()) {\r\n var visibilitychanged = function (ev) {\r\n itemContainer_1.readerChecked = ev.visible;\r\n itemContainer_1.events.disableType(\"toggled\");\r\n itemContainer_1.isActive = !ev.visible;\r\n itemContainer_1.events.enableType(\"toggled\");\r\n };\r\n sprite.addDisposer(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.dataItems.remove(_this);\r\n }\r\n }));\r\n if (sprite instanceof Sprite) {\r\n itemContainer_1.addDisposer(sprite.events.on(\"visibilitychanged\", visibilitychanged, undefined, false));\r\n itemContainer_1.addDisposer(sprite.events.on(\"hidden\", function (ev) {\r\n itemContainer_1.readerChecked = false;\r\n itemContainer_1.events.disableType(\"toggled\");\r\n itemContainer_1.isActive = true;\r\n itemContainer_1.events.enableType(\"toggled\");\r\n }, undefined, false));\r\n itemContainer_1.addDisposer(sprite.events.on(\"shown\", function (ev) {\r\n itemContainer_1.readerChecked = true;\r\n itemContainer_1.events.disableType(\"toggled\");\r\n itemContainer_1.isActive = false;\r\n itemContainer_1.events.enableType(\"toggled\");\r\n }, undefined, false));\r\n }\r\n else {\r\n itemContainer_1.addDisposer(sprite.events.on(\"visibilitychanged\", visibilitychanged, undefined, false));\r\n }\r\n }\r\n }\r\n return this._itemContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LegendDataItem.prototype, \"marker\", {\r\n /**\r\n * A [[Container]] that holds legend item's marker element.\r\n *\r\n * @return Marker\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._marker) {\r\n var marker_1 = this.component.markers.create();\r\n this._marker = marker_1;\r\n marker_1.parent = this.itemContainer;\r\n this.addSprite(marker_1);\r\n this._disposers.push(marker_1);\r\n this._disposers.push(new Disposer(function () {\r\n if ($type.hasValue(_this.component)) {\r\n _this.component.markers.removeValue(marker_1);\r\n }\r\n }));\r\n }\r\n return this._marker;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return LegendDataItem;\r\n}(DataItem));\r\nexport { LegendDataItem };\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a class that carries legend settings.\r\n *\r\n * A legend might change its settings dynamically. Legend can also be shared\r\n * by several elements, requiring different settings.\r\n *\r\n * Having legend's settings in a separate object is a good way to \"hot swap\"\r\n * a set of settings for the legend.\r\n */\r\nvar LegendSettings = /** @class */ (function () {\r\n function LegendSettings() {\r\n /**\r\n * Should marker be created for each legend item.\r\n */\r\n this.createMarker = true;\r\n }\r\n return LegendSettings;\r\n}());\r\nexport { LegendSettings };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * [[Legend]] class is used to create legend for the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/} for Legend documentation\r\n * @see {@link ILegendEvents} for a list of available events\r\n * @see {@link ILegendAdapters} for a list of available Adapters\r\n */\r\nvar Legend = /** @class */ (function (_super) {\r\n __extends(Legend, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Legend() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Legend\";\r\n // Set defaults\r\n _this.layout = \"grid\";\r\n _this.setPropertyValue(\"useDefaultMarker\", false);\r\n _this.setPropertyValue(\"scrollable\", false);\r\n _this.setPropertyValue(\"contentAlign\", \"center\");\r\n // Create a template container and list for legend items\r\n var itemContainer = new Container();\r\n itemContainer.applyOnClones = true;\r\n itemContainer.padding(8, 0, 8, 0);\r\n itemContainer.margin(0, 10, 0, 10);\r\n itemContainer.layout = \"horizontal\";\r\n itemContainer.clickable = true;\r\n itemContainer.focusable = true;\r\n itemContainer.role = \"switch\";\r\n itemContainer.togglable = true;\r\n itemContainer.cursorOverStyle = MouseCursorStyle.pointer;\r\n itemContainer.background.fillOpacity = 0; // creates hit area\r\n // Create container list using item template we just created\r\n _this.itemContainers = new ListTemplate(itemContainer);\r\n _this._disposers.push(new ListDisposer(_this.itemContainers));\r\n _this._disposers.push(_this.itemContainers.template);\r\n // Set up global keyboard events for toggling elements\r\n _this._disposers.push(getInteraction().body.events.on(\"keyup\", function (ev) {\r\n if (keyboard.isKey(ev.event, \"enter\") && _this.focusedItem) {\r\n var focusedItem = _this.focusedItem;\r\n var target = focusedItem.itemContainer;\r\n if (target.togglable) {\r\n _this.toggleDataItem(focusedItem);\r\n }\r\n else if (target.clickable && target.events.isEnabled(\"hit\")) {\r\n target.dispatchImmediately(\"hit\", { event: ev });\r\n // We need this here because \"hit\" event resets `this.focusedItem`\r\n // And we need it here\r\n _this.focusedItem = focusedItem;\r\n }\r\n }\r\n }, _this));\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create a template container and list for the a marker\r\n var marker = new Container();\r\n marker.width = 23;\r\n marker.height = 23;\r\n marker.interactionsEnabled = false;\r\n marker.applyOnClones = true;\r\n marker.setStateOnChildren = true;\r\n marker.background.fillOpacity = 0;\r\n marker.background.strokeOpacity = 0;\r\n marker.propertyFields.fill = \"fill\";\r\n marker.valign = \"middle\";\r\n var disabledColor = interfaceColors.getFor(\"disabledBackground\");\r\n marker.events.on(\"childadded\", function (event) {\r\n var child = event.newValue;\r\n var activeState = child.states.create(\"active\");\r\n activeState.properties.stroke = disabledColor;\r\n activeState.properties.fill = disabledColor;\r\n });\r\n _this.markers = new ListTemplate(marker);\r\n _this._disposers.push(new ListDisposer(_this.markers));\r\n _this._disposers.push(_this.markers.template);\r\n // Create a legend background element\r\n var rectangle = marker.createChild(RoundedRectangle);\r\n rectangle.width = percent(100);\r\n rectangle.height = percent(100);\r\n rectangle.applyOnClones = true;\r\n rectangle.propertyFields.fill = \"fill\"; //othrwise old edge doesn't like as the same pattern is set both on parent and child https://codepen.io/team/amcharts/pen/72d7a98f3fb811d3118795220ff63182\r\n rectangle.strokeOpacity = 0;\r\n // Create a template container and list for item labels\r\n var label = new Label();\r\n label.text = \"{name}\";\r\n label.margin(0, 5, 0, 5);\r\n label.valign = \"middle\";\r\n label.applyOnClones = true;\r\n label.states.create(\"active\").properties.fill = interfaceColors.getFor(\"disabledBackground\");\r\n _this.labels = new ListTemplate(label);\r\n _this._disposers.push(new ListDisposer(_this.labels));\r\n _this._disposers.push(_this.labels.template);\r\n label.interactionsEnabled = false;\r\n label.truncate = true;\r\n label.fullWords = false;\r\n // Create a template container and list for item value labels\r\n var valueLabel = new Label();\r\n valueLabel.margin(0, 5, 0, 0);\r\n valueLabel.valign = \"middle\";\r\n valueLabel.width = 50; // to avoid rearranging legend entries when value changes.\r\n valueLabel.align = \"right\";\r\n valueLabel.textAlign = \"end\";\r\n valueLabel.applyOnClones = true;\r\n valueLabel.states.create(\"active\").properties.fill = interfaceColors.getFor(\"disabledBackground\");\r\n valueLabel.interactionsEnabled = false;\r\n _this.valueLabels = new ListTemplate(valueLabel);\r\n _this._disposers.push(new ListDisposer(_this.valueLabels));\r\n _this._disposers.push(_this.valueLabels.template);\r\n _this.position = \"bottom\"; // don't use setPropertyValue here!\r\n // Create a state for disabled legend items\r\n itemContainer.states.create(\"active\");\r\n itemContainer.setStateOnChildren = true;\r\n // Apply accessibility settings\r\n _this.role = \"group\";\r\n _this.events.on(\"layoutvalidated\", _this.handleScrollbar, _this, 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 Legend.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Legend\");\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 Legend.prototype.createDataItem = function () {\r\n return new LegendDataItem();\r\n };\r\n /**\r\n * [validateDataElements description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n Legend.prototype.validateDataElements = function () {\r\n if (this.scrollbar) {\r\n this.scrollbar.start = 0;\r\n this.scrollbar.end = 1;\r\n }\r\n _super.prototype.validateDataElements.call(this);\r\n };\r\n /**\r\n * [validateDataElement description]\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n * @todo Description\r\n * @todo Figure out how to update appearance of legend item without losing focus\r\n * @todo Update legend marker appearance as apperance of related series changes\r\n */\r\n Legend.prototype.validateDataElement = function (dataItem) {\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n // Get data item (legend item's) container\r\n var container = dataItem.itemContainer;\r\n var marker = dataItem.marker;\r\n $utils.used(dataItem.label);\r\n var valueLabel = dataItem.valueLabel;\r\n // Set parent and update current state\r\n container.readerChecked = dataItem.dataContext.visible;\r\n // Tell series its legend data item\r\n dataItem.dataContext.legendDataItem = dataItem;\r\n var tempMaxWidth = dataItem.label.maxWidth;\r\n if (!(dataItem.label.width instanceof Percent)) {\r\n dataItem.label.width = undefined;\r\n }\r\n if (tempMaxWidth > 0) {\r\n dataItem.label.maxWidth = tempMaxWidth;\r\n }\r\n if (valueLabel.align == \"right\") {\r\n valueLabel.width = undefined;\r\n }\r\n var legendSettings = dataItem.dataContext.legendSettings;\r\n // If we are not using default markers, create a unique legend marker based\r\n // on the data item type\r\n var dataContext = dataItem.dataContext;\r\n if (dataContext.createLegendMarker && (!this.useDefaultMarker || !(dataContext instanceof Sprite))) {\r\n if (!dataItem.childrenCreated) {\r\n dataContext.createLegendMarker(marker);\r\n dataItem.childrenCreated = true;\r\n }\r\n }\r\n else {\r\n this.markers.template.propertyFields.fill = undefined;\r\n }\r\n if (dataContext.updateLegendValue) {\r\n dataContext.updateLegendValue(); // this solves issue with external legend, as legend is created after chart updates legend values\r\n }\r\n if (dataContext.component && dataContext.component.updateLegendValue) {\r\n dataContext.component.updateLegendValue(dataContext);\r\n }\r\n if (valueLabel.invalid) {\r\n valueLabel.validate();\r\n }\r\n if (valueLabel.text == \"\" || valueLabel.text == undefined) {\r\n valueLabel.__disabled = true;\r\n }\r\n else {\r\n valueLabel.__disabled = false;\r\n }\r\n if (legendSettings && (legendSettings.itemValueText != undefined || legendSettings.valueText != undefined)) {\r\n valueLabel.__disabled = false;\r\n }\r\n var visible = dataItem.dataContext.visible;\r\n if (visible === undefined) {\r\n visible = true;\r\n }\r\n visible = $type.toBoolean(visible);\r\n dataItem.dataContext.visible = visible;\r\n container.events.disableType(\"toggled\");\r\n container.isActive = !visible;\r\n if (container.isActive) {\r\n container.setState(\"active\", 0);\r\n }\r\n else {\r\n container.setState(\"default\", 0);\r\n }\r\n container.events.enableType(\"toggled\");\r\n };\r\n Legend.prototype.afterDraw = function () {\r\n var _this = this;\r\n var maxWidth = this.getPropertyValue(\"maxWidth\");\r\n var maxLabelWidth = 0;\r\n this.labels.each(function (label) {\r\n if (label.invalid) {\r\n label.maxWidth = undefined;\r\n label.validate();\r\n }\r\n if (label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight > maxLabelWidth) {\r\n maxLabelWidth = label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight;\r\n }\r\n });\r\n var maxValueLabelWidth = 0;\r\n this.valueLabels.each(function (label) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n if (label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight > maxValueLabelWidth) {\r\n maxValueLabelWidth = label.measuredWidth + label.pixelMarginLeft + label.pixelMarginRight;\r\n }\r\n });\r\n var maxMarkerWidth = 0;\r\n this.markers.each(function (marker) {\r\n if (marker.invalid) {\r\n marker.validate();\r\n }\r\n if (marker.measuredWidth + marker.pixelMarginLeft + marker.pixelMarginRight > maxMarkerWidth) {\r\n maxMarkerWidth = marker.measuredWidth + marker.pixelMarginLeft + marker.pixelMarginRight;\r\n }\r\n });\r\n var itemContainer = this.itemContainers.template;\r\n var margin = itemContainer.pixelMarginRight + itemContainer.pixelMarginLeft;\r\n var maxAdjustedLabelWidth;\r\n var trueMaxWidth = maxLabelWidth + maxValueLabelWidth + maxMarkerWidth;\r\n if (!$type.isNumber(maxWidth)) {\r\n maxAdjustedLabelWidth = maxLabelWidth;\r\n }\r\n else {\r\n maxWidth = maxWidth - margin;\r\n if (maxWidth > trueMaxWidth) {\r\n maxWidth = trueMaxWidth;\r\n }\r\n maxAdjustedLabelWidth = maxWidth - maxMarkerWidth - maxValueLabelWidth;\r\n }\r\n this.labels.each(function (label) {\r\n if (_this.valueLabels.template.align == \"right\" || label.measuredWidth > maxAdjustedLabelWidth) {\r\n if (!(label.width instanceof Percent)) {\r\n label.width = Math.min(label.maxWidth, maxAdjustedLabelWidth - label.pixelMarginLeft - label.pixelMarginRight);\r\n label.maxWidth = label.width;\r\n }\r\n }\r\n });\r\n if (this.valueLabels.template.align == \"right\") {\r\n this.valueLabels.each(function (valueLabel) {\r\n valueLabel.width = maxValueLabelWidth - valueLabel.pixelMarginRight - valueLabel.pixelMarginLeft;\r\n });\r\n }\r\n _super.prototype.afterDraw.call(this);\r\n };\r\n Legend.prototype.handleScrollbar = function () {\r\n var scrollbar = this.scrollbar;\r\n if (this.scrollable && scrollbar) {\r\n scrollbar.height = this.measuredHeight;\r\n scrollbar.x = this.measuredWidth - scrollbar.pixelWidth - scrollbar.pixelMarginLeft;\r\n if (this.contentHeight > this.measuredHeight) {\r\n scrollbar.visible = true;\r\n scrollbar.thumb.height = scrollbar.height * this.measuredHeight / this.contentHeight;\r\n this.paddingRight = scrollbar.pixelWidth + scrollbar.pixelMarginLeft + +scrollbar.pixelMarginRight;\r\n }\r\n else {\r\n scrollbar.visible = false;\r\n }\r\n this.updateMasks();\r\n }\r\n };\r\n Object.defineProperty(Legend.prototype, \"position\", {\r\n /**\r\n * @return Position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"position\");\r\n },\r\n /**\r\n * Position of the legend.\r\n *\r\n * Options: \"left\", \"right\", \"top\", \"bottom\" (default), or \"absolute\".\r\n *\r\n * IMPORTANT: [[MapChart]] will ignore this setting, as it is using different\r\n * layout structure than other charts.\r\n *\r\n * To position legend in [[MapChart]] set legend's `align` (`\"left\"` or\r\n * `\"right\"`) and `valign` (`\"top\"` or `\"bottom\"`) properties instead.\r\n *\r\n * @default \"bottom\"\r\n * @param value Position\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"position\", value)) {\r\n if (value == \"left\" || value == \"right\") {\r\n this.margin(10, 5, 10, 10);\r\n this.valign = \"middle\";\r\n this.contentAlign = \"none\";\r\n this.valueLabels.template.align = \"right\";\r\n if (!$type.isNumber(this.maxColumns)) {\r\n this.maxColumns = 1;\r\n }\r\n this.width = undefined;\r\n this.maxWidth = 220;\r\n }\r\n else {\r\n this.maxColumns = undefined;\r\n this.width = percent(100);\r\n this.valueLabels.template.align = \"left\";\r\n }\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Legend.prototype, \"useDefaultMarker\", {\r\n /**\r\n * @return Use default marker?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"useDefaultMarker\");\r\n },\r\n /**\r\n * Should legend try to mirror the look of the related item when building\r\n * the marker for legend item?\r\n *\r\n * If set to `false` it will try to make the marker look like its related\r\n * item.\r\n *\r\n * E.g. if an item is for a Line Series, it will display a line of the\r\n * same thickness, color, and will use the same bullets if series have them.\r\n *\r\n * If set to `true`, all markers will be shown as squares, regardless of te\r\n * series type.\r\n *\r\n * @default false\r\n * @param value Use default marker?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"useDefaultMarker\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Legend.prototype, \"scrollable\", {\r\n /**\r\n * @return Legend Scrollable?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"scrollable\");\r\n },\r\n /**\r\n * If set to `true` the Legend will display a scrollbar if its contents do\r\n * not fit into its `maxHeight`.\r\n *\r\n * Please note that `maxHeight` is automatically set for Legend when its\r\n * `position` is set to `\"left\"` or `\"right\"`.\r\n *\r\n * @default false\r\n * @since 4.8.0\r\n * @param value Legend Scrollable?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"scrollable\", value, true)) {\r\n if (value) {\r\n var scrollbar = this.createChild(Scrollbar);\r\n this.scrollbar = scrollbar;\r\n scrollbar.isMeasured = false;\r\n scrollbar.orientation = \"vertical\";\r\n scrollbar.endGrip.__disabled = true;\r\n scrollbar.startGrip.__disabled = true;\r\n scrollbar.visible = false;\r\n scrollbar.marginLeft = 5;\r\n this._mouseWheelDisposer = this.events.on(\"wheel\", this.handleWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer);\r\n this._disposers.push(scrollbar.events.on(\"rangechanged\", this.updateMasks, this, false));\r\n }\r\n else {\r\n if (this._mouseWheelDisposer) {\r\n this._mouseWheelDisposer.dispose();\r\n if (this.scrollbar) {\r\n this.scrollbar.dispose();\r\n this.scrollbar = undefined;\r\n }\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Handles mouse wheel scrolling of legend.\r\n *\r\n * @param event Event\r\n */\r\n Legend.prototype.handleWheel = function (event) {\r\n var shift = event.shift.y;\r\n var scrollbar = this.scrollbar;\r\n if (scrollbar) {\r\n var ds = (shift / 1000 * this.measuredHeight / this.contentHeight);\r\n var delta = scrollbar.end - scrollbar.start;\r\n if (shift > 0) {\r\n scrollbar.start = $math.max(0, scrollbar.start - ds);\r\n scrollbar.end = scrollbar.start + delta;\r\n }\r\n else {\r\n scrollbar.end = $math.min(1, scrollbar.end - ds);\r\n scrollbar.start = scrollbar.end - delta;\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Legend.prototype.updateMasks = function () {\r\n var _this = this;\r\n if (this.scrollbar) {\r\n this.itemContainers.each(function (itemContainer) {\r\n itemContainer.dy = -_this.scrollbar.thumb.pixelY * _this.contentHeight / _this.measuredHeight;\r\n itemContainer.maskRectangle = { x: 0, y: -itemContainer.dy, width: _this.measuredWidth, height: _this.measuredHeight };\r\n });\r\n }\r\n };\r\n /**\r\n * Toggles a legend item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item Legend item\r\n * @todo Maybe do it with togglable instead\r\n */\r\n Legend.prototype.toggleDataItem = function (item) {\r\n var dataContext = item.dataContext;\r\n if (!dataContext.visible || dataContext.isHiding || (dataContext instanceof Sprite && dataContext.isHidden)) {\r\n item.color = item.colorOrig;\r\n dataContext.appeared = true;\r\n item.itemContainer.isActive = false;\r\n if (dataContext.hidden === true) {\r\n dataContext.hidden = false;\r\n }\r\n if (dataContext.show) {\r\n dataContext.show();\r\n }\r\n else {\r\n dataContext.visible = true;\r\n }\r\n this.svgContainer.readerAlert(this.language.translate(\"%1 shown\", this.language.locale, item.label.readerTitle));\r\n }\r\n else {\r\n item.itemContainer.isActive = true;\r\n dataContext.appeared = true;\r\n if (dataContext.hide) {\r\n dataContext.hide();\r\n }\r\n else {\r\n dataContext.visible = false;\r\n }\r\n this.svgContainer.readerAlert(this.language.translate(\"%1 hidden\", this.language.locale, item.label.readerTitle));\r\n item.color = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n }\r\n };\r\n Object.defineProperty(Legend.prototype, \"preloader\", {\r\n /**\r\n * Override preloader method so that legend does not accidentally show its\r\n * own preloader.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Always `undefined`\r\n */\r\n get: function () {\r\n return;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * [handleDataItemPropertyChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Legend.prototype.handleDataItemPropertyChange = function (dataItem, name) {\r\n dataItem.valueLabel.invalidate();\r\n dataItem.label.invalidate();\r\n };\r\n return Legend;\r\n}(Component));\r\nexport { Legend };\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[\"Legend\"] = Legend;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Move legend to below the chart if chart is narrow\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.widthXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Legend && (target.position == \"left\" || target.position == \"right\")) {\r\n var state = target.states.create(stateId);\r\n state.properties.position = \"bottom\";\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Move legend to the right if chart is very short\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Legend && (target.position == \"top\" || target.position == \"bottom\")) {\r\n var state = target.states.create(stateId);\r\n state.properties.position = \"right\";\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Disable legend altogether on small charts\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.isXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Legend) {\r\n var state = target.states.create(stateId);\r\n state.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=Legend.js.map","/**\r\n * Module that defines everything related to building bullets.\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 { registry } from \"../../core/Registry\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Class used to creates bullets.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nvar Bullet = /** @class */ (function (_super) {\r\n __extends(Bullet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Bullet() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Bullet\";\r\n _this.isMeasured = false;\r\n _this.tooltipX = 0;\r\n _this.tooltipY = 0;\r\n _this.layout = \"none\";\r\n _this.applyOnClones = true;\r\n _this.copyToLegendMarker = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Bullet.prototype, \"locationX\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"locationX\");\r\n },\r\n /**\r\n * Relative horizontal location within cell. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"locationX\", value)) {\r\n var dataItem = this.dataItem;\r\n if (dataItem && dataItem.component) {\r\n dataItem.component.invalidate();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Bullet.prototype, \"locationY\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"locationY\");\r\n },\r\n /**\r\n * Relative vertical location within cell. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"locationY\", value)) {\r\n var dataItem = this.dataItem;\r\n if (dataItem && dataItem.component) {\r\n dataItem.component.invalidate();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Bullet.prototype, \"xField\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"xField\");\r\n },\r\n /**\r\n * [xField description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"xField\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Bullet.prototype, \"yField\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"yField\");\r\n },\r\n /**\r\n * [yField description]\r\n *\r\n * Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"yField\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Bullet.prototype, \"isDynamic\", {\r\n /**\r\n * @return Redraw on data change?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"isDynamic\");\r\n },\r\n /**\r\n * Indicates if the bullet is \"dynamic\".\r\n *\r\n * In most cases the bullets remain the same, even if the underlying data\r\n * changes.\r\n *\r\n * However, in cases where bullet also displays a label, or its size depends\r\n * on data, it also needs to be redrawn when the underlying data changes.\r\n *\r\n * Only those bullets that have set `isDynamic = true` will be redrawn each\r\n * time data changes. Regular bullets will be reused as they are.\r\n *\r\n * @default false\r\n * @param value Redraw on data change?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"isDynamic\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Bullet.prototype, \"copyToLegendMarker\", {\r\n /**\r\n * @return Redraw on data change?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"copyToLegendMarker\");\r\n },\r\n /**\r\n * Indicates if the bullet should be copied to legend marker\r\n *\r\n * @default false\r\n * @param value Redraw on data change?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"copyToLegendMarker\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Bullet;\r\n}(Container));\r\nexport { Bullet };\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[\"Bullet\"] = Bullet;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Hide bullets\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.isXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Bullet) {\r\n var state = target.states.create(stateId);\r\n state.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=Bullet.js.map","/**\r\n * Serial chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, ChartDataItem } from \"../Chart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Series } from \"../series/Series\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[SerialChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SerialChartDataItem = /** @class */ (function (_super) {\r\n __extends(SerialChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SerialChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SerialChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SerialChartDataItem;\r\n}(ChartDataItem));\r\nexport { SerialChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all series-based charts, like XY, Pie, etc.\r\n *\r\n * Is not useful on its own.\r\n *\r\n * @see {@link ISerialChartEvents} for a list of available Events\r\n * @see {@link ISerialChartAdapters} for a list of available Adapters\r\n */\r\nvar SerialChart = /** @class */ (function (_super) {\r\n __extends(SerialChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SerialChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SerialChart\";\r\n _this.colors = new ColorSet();\r\n _this._usesData = false;\r\n // Create a container for series\r\n var seriesContainer = _this.chartContainer.createChild(Container);\r\n seriesContainer.shouldClone = false;\r\n seriesContainer.width = percent(100);\r\n seriesContainer.height = percent(100);\r\n seriesContainer.isMeasured = false;\r\n seriesContainer.layout = \"none\";\r\n seriesContainer.zIndex = 2;\r\n _this.seriesContainer = seriesContainer;\r\n // Create a container for bullets\r\n var bulletsContainer = _this.chartContainer.createChild(Container);\r\n bulletsContainer.shouldClone = false;\r\n bulletsContainer.width = percent(100);\r\n bulletsContainer.height = percent(100);\r\n bulletsContainer.isMeasured = false;\r\n bulletsContainer.zIndex = 3;\r\n bulletsContainer.layout = \"none\";\r\n _this.bulletsContainer = bulletsContainer;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n SerialChart.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this.colors) {\r\n this.colors.dispose();\r\n }\r\n if (this.patterns) {\r\n this.patterns.dispose();\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor\r\n */\r\n SerialChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Serial chart\");\r\n }\r\n };\r\n Object.defineProperty(SerialChart.prototype, \"series\", {\r\n /**\r\n * A list of chart's series.\r\n *\r\n * @return Chart's series\r\n */\r\n get: function () {\r\n if (!this._series) {\r\n this._series = new ListTemplate(this.createSeries());\r\n this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false);\r\n this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false);\r\n this._disposers.push(new ListDisposer(this._series, false));\r\n this._disposers.push(this._series.template);\r\n }\r\n return this._series;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n SerialChart.prototype.handleSeriesRemoved = function (event) {\r\n var series = event.oldValue;\r\n this.dataUsers.removeValue(series);\r\n this.dataUsers.each(function (dataUser) {\r\n dataUser.invalidateDataItems();\r\n });\r\n if (series.autoDispose) {\r\n series.dispose();\r\n }\r\n else {\r\n series.parent = undefined;\r\n series.bulletsContainer.parent = undefined;\r\n }\r\n //this.feedLegend();\r\n var legend = this.legend;\r\n if (legend) {\r\n var dataItems = this.legend.dataItems;\r\n for (var i = dataItems.length - 1; i >= 0; i--) {\r\n var dataItem = dataItems.getIndex(i);\r\n if (dataItem && dataItem.dataContext == series) {\r\n legend.dataItems.remove(dataItem);\r\n }\r\n }\r\n for (var i = legend.data.length - 1; i >= 0; i--) {\r\n var di = legend.data[i];\r\n if (di && di == series) {\r\n $array.remove(legend.data, di);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n SerialChart.prototype.handleSeriesAdded = function (event) {\r\n var _this = this;\r\n var series = event.newValue;\r\n if (series.isDisposed()) {\r\n return;\r\n }\r\n series.chart = this;\r\n series.parent = this.seriesContainer;\r\n series.bulletsContainer.parent = this.bulletsContainer;\r\n this._dataUsers.moveValue(series);\r\n series.addDisposer(new Disposer(function () {\r\n _this.dataUsers.removeValue(series);\r\n }));\r\n this.handleSeriesAdded2(series);\r\n this.handleLegendSeriesAdded(series);\r\n };\r\n SerialChart.prototype.handleLegendSeriesAdded = function (series) {\r\n if (!series.hiddenInLegend) {\r\n if (this.legend) {\r\n this.legend.addData(series);\r\n }\r\n }\r\n };\r\n SerialChart.prototype.handleSeriesAdded2 = function (series) {\r\n var _this = this;\r\n if (!this.dataInvalid) {\r\n this._disposers.push(\r\n // on exit only as data is usually passed after push\r\n registry.events.once(\"exitframe\", function () {\r\n if (!series.data || series.data.length == 0) {\r\n series.data = _this.data;\r\n if (series.showOnInit) {\r\n series.reinit();\r\n series.setPropertyValue(\"showOnInit\", false);\r\n series.showOnInit = true;\r\n }\r\n if (!series.isDisposed()) {\r\n series.events.once(\"datavalidated\", function () {\r\n if (series.data == _this.data) {\r\n series._data = [];\r\n }\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n SerialChart.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.hiddenInLegend) {\r\n legendData_1.push(series);\r\n }\r\n });\r\n legend.dataFields.name = \"name\";\r\n legend.data = legendData_1;\r\n }\r\n };\r\n /**\r\n * Creates and returns a new Series, suitable for this chart type.\r\n *\r\n * @return New series\r\n */\r\n SerialChart.prototype.createSeries = function () {\r\n return new Series();\r\n };\r\n Object.defineProperty(SerialChart.prototype, \"colors\", {\r\n /**\r\n * @return Color list\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"colors\");\r\n },\r\n /**\r\n * Chart's color list.\r\n *\r\n * This list can be used by a number of serial items, like applying a new\r\n * color for each Series added. Or, applying a new color for each slice\r\n * of a Pie chart.\r\n *\r\n * Please see [[ColorSet]] for information on how you can set up to generate\r\n * unique colors.\r\n *\r\n * A theme you are using may override default pre-defined colors.\r\n *\r\n * @param value Color list\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"colors\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SerialChart.prototype, \"patterns\", {\r\n /**\r\n * @return Pattern set\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"patterns\");\r\n },\r\n /**\r\n * A [[PatternSet]] to use when creating patterned fills for slices.\r\n *\r\n * @since 4.7.5\r\n * @param value Pattern set\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"patterns\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all parameters from another [[SerialChart]].\r\n *\r\n * @param source Source SerialChart\r\n */\r\n SerialChart.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.series.copyFrom(source.series);\r\n };\r\n /**\r\n * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state.\r\n */\r\n SerialChart.prototype.appear = function () {\r\n _super.prototype.appear.call(this);\r\n this.series.each(function (series) {\r\n if (series.showOnInit && series.inited) {\r\n series.appear();\r\n }\r\n });\r\n };\r\n return SerialChart;\r\n}(Chart));\r\nexport { SerialChart };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SerialChart\"] = SerialChart;\r\n//# sourceMappingURL=SerialChart.js.map","/**\r\n * Grip module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Button } from \"./Button\";\r\nimport { Sprite } from \"../Sprite\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { registry } from \"../Registry\";\r\nimport { percent } from \"../utils/Percent\";\r\nimport * as $path from \"../rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a grip element that can be used for scrolling or other things.\r\n *\r\n * @see {@link IGripEvents} for a list of available events\r\n * @see {@link IGripAdapters} for a list of available Adapters\r\n * @since 4.4.0\r\n */\r\nvar Grip = /** @class */ (function (_super) {\r\n __extends(Grip, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Grip() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"Grip\";\r\n var cs = new InterfaceColorSet();\r\n // Set defaults\r\n _this.layout = \"absolute\";\r\n _this.padding(10, 10, 10, 10);\r\n _this.margin(3, 3, 3, 3);\r\n _this.background.fillOpacity = 0.3;\r\n _this.background.cornerRadius(10, 10, 10, 10);\r\n // Create an icon\r\n var icon = new Sprite();\r\n icon.element = _this.paper.add(\"path\");\r\n var path = $path.moveTo({ x: -6, y: 0 });\r\n path += $path.lineTo({ x: 6, y: 0 });\r\n path += $path.moveTo({ x: -8, y: -6 });\r\n path += $path.lineTo({ x: 0, y: -12 });\r\n path += $path.lineTo({ x: 8, y: -6 });\r\n path += $path.moveTo({ x: -8, y: 6 });\r\n path += $path.lineTo({ x: 0, y: 12 });\r\n path += $path.lineTo({ x: 8, y: 6 });\r\n icon.path = path;\r\n icon.strokeWidth = 2;\r\n icon.fillOpacity = 0;\r\n icon.pixelPerfect = true;\r\n icon.padding(0, 4, 0, 4);\r\n icon.stroke = cs.getFor(\"text\");\r\n icon.strokeOpacity = 0.7;\r\n icon.align = \"center\";\r\n icon.valign = \"middle\";\r\n _this.icon = icon;\r\n _this.label.dispose();\r\n _this.label = undefined;\r\n // Set default position\r\n _this.position = \"right\";\r\n // Set up autohide\r\n _this.autoHideDelay = 3000;\r\n _this.events.on(\"shown\", function (ev) {\r\n if (_this._autoHideTimeout) {\r\n _this._autoHideTimeout.dispose();\r\n }\r\n if (_this.autoHideDelay) {\r\n _this._autoHideTimeout = _this.setTimeout(function () {\r\n _this.hide();\r\n }, _this.autoHideDelay);\r\n }\r\n });\r\n _this.events.on(\"down\", function (ev) {\r\n if (_this._autoHideTimeout) {\r\n _this._autoHideTimeout.dispose();\r\n }\r\n });\r\n _this.events.on(\"out\", function (ev) {\r\n if (_this.autoHideDelay) {\r\n _this._autoHideTimeout = _this.setTimeout(function () {\r\n _this.hide();\r\n }, _this.autoHideDelay);\r\n }\r\n });\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Grip.prototype, \"position\", {\r\n /**\r\n * @return Position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"position\");\r\n },\r\n /**\r\n * Sets position of the grip.\r\n *\r\n * Available options: \"left\", \"right\" (default), \"top\", \"bottom\".\r\n *\r\n * @param value Position\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"position\", value)) {\r\n switch (value) {\r\n case \"left\":\r\n this.align = \"left\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"left\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 0;\r\n this.width = undefined;\r\n this.height = percent(30);\r\n break;\r\n case \"right\":\r\n this.align = \"right\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"right\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 0;\r\n this.width = undefined;\r\n this.height = percent(30);\r\n break;\r\n case \"top\":\r\n this.align = \"center\";\r\n this.valign = \"top\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"top\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n break;\r\n case \"bottom\":\r\n this.align = \"center\";\r\n this.valign = \"bottom\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"bottom\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n break;\r\n default:\r\n this.align = \"center\";\r\n this.valign = \"middle\";\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"middle\";\r\n this.icon.rotation = 90;\r\n this.width = percent(30);\r\n this.height = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Grip.prototype, \"autoHideDelay\", {\r\n /**\r\n * @return Delay\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"autoHideDelay\");\r\n },\r\n /**\r\n * Number of milliseconds to show grip until it is hidden automatically.\r\n *\r\n * @default 3000\r\n * @param value Delay\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"autoHideDelay\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Grip;\r\n}(Button));\r\nexport { Grip };\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[\"Grip\"] = Grip;\r\n//# sourceMappingURL=Grip.js.map","/**\r\n * [[Chart]] class provides base functionality for all chart types to inherit.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { registry } from \"../core/Registry\";\r\nimport { Component } from \"../core/Component\";\r\nimport { MutableValueDisposer, Disposer } from \"../core/utils/Disposer\";\r\nimport { ListTemplate, ListDisposer } from \"../core/utils/List\";\r\nimport { Container } from \"../core/Container\";\r\nimport { Label } from \"../core/elements/Label\";\r\nimport { Grip } from \"../core/elements/Grip\";\r\nimport { DataItem } from \"../core/DataItem\";\r\nimport { percent } from \"../core/utils/Percent\";\r\nimport * as $iter from \"../core/utils/Iterator\";\r\nimport * as $type from \"../core/utils/Type\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../core/utils/Responsive\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[Chart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ChartDataItem = /** @class */ (function (_super) {\r\n __extends(ChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ChartDataItem;\r\n}(DataItem));\r\nexport { ChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all Charts.\r\n *\r\n * @see {@link IChartEvents} for a list of available Events\r\n * @see {@link IChartAdapters} for a list of available Adapters\r\n */\r\nvar Chart = /** @class */ (function (_super) {\r\n __extends(Chart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Chart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A reference to chart's [[Legend]].\r\n * @ignore\r\n */\r\n _this._legend = new MutableValueDisposer();\r\n if (_this.constructor === Chart) {\r\n throw new Error(\"'Chart' cannot be instantiated directly. Please use a specific chart type.\");\r\n }\r\n _this.className = \"Chart\";\r\n // Create a list of titles\r\n var template = new Label();\r\n _this.titles = new ListTemplate(template);\r\n _this._disposers.push(new ListDisposer(_this.titles));\r\n _this._disposers.push(template);\r\n // Chart component is also a container. it holds _chartAndLegendCont and titles\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.layout = \"vertical\";\r\n // Chart and legend\r\n var chartAndLegendContainer = _this.createChild(Container);\r\n chartAndLegendContainer.shouldClone = false;\r\n chartAndLegendContainer.layout = \"vertical\";\r\n chartAndLegendContainer.width = percent(100);\r\n chartAndLegendContainer.height = percent(100);\r\n _this.chartAndLegendContainer = chartAndLegendContainer;\r\n // Chart container holds all the elements of a chart, extept titles and legend\r\n var chartContainer = chartAndLegendContainer.createChild(Container);\r\n chartContainer.shouldClone = false;\r\n chartContainer.width = percent(100);\r\n chartContainer.height = percent(100);\r\n _this.chartContainer = chartContainer;\r\n _this.showOnInit = true;\r\n _this._disposers.push(_this._legend);\r\n // Add title list events to apply certain formatting options and to make\r\n // the chart reference them as accessible screen reader labels\r\n _this.titles.events.on(\"inserted\", function (label) {\r\n _this.processTitle(label);\r\n _this.updateReaderTitleReferences();\r\n }, _this, false);\r\n _this.titles.events.on(\"removed\", function (label) {\r\n _this.updateReaderTitleReferences();\r\n }, _this, false);\r\n // Accessibility\r\n // It seems we can't set focusable on the whole chart because it seems to\r\n // mess up the whole focus event system - getting a focus on an inside\r\n // object also trigger focus on parent\r\n //this.focusable = true;\r\n _this.role = \"region\";\r\n _this.defaultState.transitionDuration = 1;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n Chart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Chart\");\r\n }\r\n };\r\n /**\r\n * Initiates drawing of the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Chart.prototype.draw = function () {\r\n this.fixLayout();\r\n _super.prototype.draw.call(this);\r\n };\r\n /**\r\n * Updates legend's hierarchy based on the position.\r\n */\r\n Chart.prototype.fixLayout = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var chartAndLegendContainer = this.chartAndLegendContainer;\r\n var chartContainer = this.chartContainer;\r\n chartContainer.x = undefined;\r\n chartContainer.y = undefined;\r\n if (legend.position != \"absolute\") {\r\n legend.x = undefined;\r\n legend.y = undefined;\r\n }\r\n switch (legend.position) {\r\n case \"left\":\r\n chartAndLegendContainer.layout = \"horizontal\";\r\n legend.toBack();\r\n break;\r\n case \"right\":\r\n chartAndLegendContainer.layout = \"horizontal\";\r\n legend.toFront();\r\n break;\r\n case \"top\":\r\n chartAndLegendContainer.layout = \"vertical\";\r\n legend.toBack();\r\n break;\r\n case \"bottom\":\r\n chartAndLegendContainer.layout = \"vertical\";\r\n legend.toFront();\r\n break;\r\n case \"absolute\":\r\n legend.isMeasured = false;\r\n break;\r\n }\r\n }\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n */\r\n Chart.prototype.feedLegend = function () {\r\n // Nothing here. This method is provided only as a \"placeholder\" for\r\n // extending classes to override\r\n };\r\n /**\r\n * Adds a new title to the chart when it is inserted into chart's titles\r\n * list.\r\n * @param event An event object which is triggered when inserting into titles list\r\n * @return Label object\r\n */\r\n Chart.prototype.processTitle = function (event) {\r\n var title = event.newValue;\r\n title.parent = this;\r\n title.toBack();\r\n title.shouldClone = false;\r\n title.align = \"center\";\r\n // Need to explicitly apply the `id` attribute so it can be referenced by\r\n // `aria-labelledby`\r\n title.uidAttr();\r\n return title;\r\n };\r\n /**\r\n * Checks if chart has any title elements. If it does, we will use them in an\r\n * `aria-labelledby` attribute so that screen readers can use them to properly\r\n * describe the chart when it is focused or hovered.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Chart.prototype.updateReaderTitleReferences = function () {\r\n if (this.titles.length) {\r\n var titleIds_1 = [];\r\n $iter.each(this.titles.iterator(), function (title) {\r\n titleIds_1.push(title.uid);\r\n });\r\n this.setSVGAttribute({ \"aria-labelledby\": titleIds_1.join(\" \") });\r\n }\r\n else {\r\n this.removeSVGAttribute(\"aria-labelledby\");\r\n }\r\n };\r\n Object.defineProperty(Chart.prototype, \"legend\", {\r\n /**\r\n * @return Legend\r\n */\r\n get: function () {\r\n return this._legend.get();\r\n },\r\n /**\r\n * Holds the instance of chart's [[Leged]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/legend/} for more information about legends\r\n * @param Legend\r\n */\r\n set: function (legend) {\r\n this.setLegend(legend);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Prepares the legend instance for use in this chart.\r\n *\r\n * @param legend Legend\r\n */\r\n Chart.prototype.setLegend = function (legend) {\r\n var _this = this;\r\n if (this._legend.get() !== legend) {\r\n if (legend) {\r\n // Set legend options\r\n legend.parent = this.chartAndLegendContainer;\r\n this._legend.set(legend, legend.events.on(\"propertychanged\", function (event) {\r\n if (event.property == \"position\") {\r\n _this.fixLayout();\r\n }\r\n }, undefined, false));\r\n legend.addDisposer(new Disposer(function () {\r\n _this.legend = undefined;\r\n }));\r\n }\r\n else {\r\n this._legend.reset();\r\n }\r\n this.feedLegend();\r\n }\r\n };\r\n /**\r\n * Destroys this object and all related data.\r\n */\r\n Chart.prototype.dispose = function () {\r\n // otherwise there might be some errors when disposing chart which was just inited\r\n if (this.legend) {\r\n this.legend.dispose();\r\n }\r\n _super.prototype.dispose.call(this);\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 Chart.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up legend\r\n if ($type.hasValue(config.legend) && !$type.hasValue(config.legend.type)) {\r\n config.legend.type = \"Legend\";\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\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 Chart.prototype.copyFrom = function (source) {\r\n this.titles.copyFrom(source.titles);\r\n this.chartContainer.copyFrom(source.chartContainer);\r\n if (source.legend) {\r\n this.legend = source.legend.clone();\r\n this.legend.removeChildren();\r\n }\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n Object.defineProperty(Chart.prototype, \"dragGrip\", {\r\n /**\r\n * @return Grip\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._dragGrip) {\r\n var grip_1 = this.tooltipContainer.createChild(Grip);\r\n grip_1.align = \"right\";\r\n grip_1.valign = \"middle\";\r\n grip_1.hide(0);\r\n grip_1.events.on(\"down\", function (ev) {\r\n if (ev.touch) {\r\n _this.interactionsEnabled = false;\r\n }\r\n });\r\n grip_1.events.on(\"up\", function (ev) {\r\n _this.interactionsEnabled = true;\r\n });\r\n this.events.on(\"down\", function (ev) {\r\n if (ev.touch) {\r\n grip_1.show();\r\n }\r\n });\r\n this._dragGrip = grip_1;\r\n }\r\n return this._dragGrip;\r\n },\r\n /**\r\n * An instance of [[Grip]] which serves as a grip point which appears on\r\n * touch and allows scrolling whole page even if chart is occupying the\r\n * whole of the screen and would otherwise prevent scrolling.\r\n *\r\n * @since 4.4.0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/touch/} For more information.\r\n * @param value Grip\r\n */\r\n set: function (value) {\r\n this._dragGrip = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Chart.prototype, \"focusable\", {\r\n get: function () {\r\n return this.parent.focusable;\r\n },\r\n set: function (value) {\r\n this.parent.focusable = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Chart;\r\n}(Component));\r\nexport { Chart };\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[\"Chart\"] = Chart;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Reduce horizontal margins\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.widthXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Chart) {\r\n var state = target.states.create(stateId);\r\n if (target.pixelPaddingLeft > 10) {\r\n state.properties.paddingLeft = 10;\r\n }\r\n if (target.pixelPaddingRight > 10) {\r\n state.properties.paddingRight = 10;\r\n }\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Reduce vertical margins\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Chart) {\r\n var state = target.states.create(stateId);\r\n if (target.pixelPaddingTop > 10) {\r\n state.properties.paddingTop = 10;\r\n }\r\n if (target.pixelPaddingBottom > 10) {\r\n state.properties.paddingBottom = 10;\r\n }\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Remove horizontal padding\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.widthXXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Chart) {\r\n var state = target.states.create(stateId);\r\n state.properties.paddingLeft = 0;\r\n state.properties.paddingRight = 0;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Remove vertical padding\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Chart) {\r\n var state = target.states.create(stateId);\r\n state.properties.paddingTop = 0;\r\n state.properties.paddingBottom = 0;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=Chart.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"],"sourceRoot":""}