{"version":3,"sources":["webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/ValueAxis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/ValueAxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisLabel.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/HeatLegend.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRenderer.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererY.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererX.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisLine.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/Grid.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisFill.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Tick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisBullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/Axis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisTick.js"],"names":["ValueAxisDataItem","_super","_this","call","this","className","values","value","endValue","applyTheme","Object","defineProperty","prototype","get","set","setValue","enumerable","configurable","ValueAxis","_stepDecimalPlaces","_prevStepDecimalPlaces","_adjustLabelPrecision","_baseValue","_adjustedStart","_adjustedEnd","_extremesChanged","_deltaMinMax","_dsc","calculateTotals","axisFieldName","setPropertyValue","Number","MAX_VALUE","keepSelection","includeRangesInMinMax","fillRule","dataItem","axis","component","axisFill","disabled","step","Math","round","__disabled","createDataItem","createAxisBreak","dataChangeUpdate","clearCache","_start","dispatchImmediately","_end","_maxZoomed","_maxDefined","_minZoomed","_minDefined","_maxAdjusted","_minAdjusted","processSeriesDataItems","series","getIndex","startIndex","dataItems","length","endIndex","_loop_1","i","total","sum","this_1","each","excludeFromTotal","dataItem_1","key","workingValue","abs","dataItem_2","setCalculatedValue","validate","axisLength","getMinMax","fixAxisBreaks","calculateZoom","validateAxisElements","validateAxisRanges","validateBreaks","hideUnusedDataItems","renderer","invalidateLayout","min","max","positionToValue","start","end","differece","adjustDifference","minMaxStep","adjustMinMax","_gridCount","stepDecimalPlaces","syncWithAxis","calculated","getCache","_step","fixSmallStep","value_1","minZoomed","logarithmic","differencePower","log","LOG10E","pow","floor","maxZoomed","resetIterators","dataItemsIterator_1","_dataItemsIterator","precisionChanged","axisBreak","isInBreak","find","x","appendDataItem","undefined","text","formatLabel","label","invalid","axisLetter","measuredWidth","ghostLabel","measuredHeight","currentText","validateDataElement","oldValue","stepPower","decCount","axisBreaks","_axisBreaks","renderer_1","iterator","breakSize","startPoint","endPoint","minGridDistance","breakValue_1","adjustedMin","adjustedMax","adjustedStartValue","adjustedEndValue","adjustedStep","itemIndex","_axisItemCount","position","valueToPosition","endPosition","fillEndPosition","point","positionToPoint","tick","updateTickElement","grid","updateGridElement","updateLabelElement","fill","updateFillElement","isRange","bullet","updateBullet","mask","adjustLabelPrecision","numberFormatter","format","baseValue","basePoint","_adapterO","apply","invalidateSeries","anyToPosition","valueToPoint","angle","positionToAngle","y","anyToPoint","min_1","max_1","difference","_difference","startValue","treatZeroAs","invalidateLabels","invalidate","difference_1","value_2","breakStartPosition","startPosition","breakEndPosition","breakStartValue","breakEndValue","breakPosition","E","xToValue","pointToPosition","yToValue","animateMinMax","animate","property","from","to","rangeChangeDuration","rangeChangeEasing","updateGridCount","POSITIVE_INFINITY","NEGATIVE_INFINITY","ignoreMinMax","seriesMin","seriesMax","axisRanges","range","minValue","maxValue","raiseCriticalError","Error","_minReal","_maxReal","dif","fixMin","fixMax","exponent","power","extraMin","extraMax","strict","strictMinMax","labels","animation","_minMaxAnimation","inited","isFinished","_finalMax","_finalMin","events","on","validateDataItems","handleSelectionExtremesChange","invalidateDataItems","gridCount","strictMode","initialMin","initialMax","extra","Infinity","ceil","stepDivisor","maxPrecision","minCount","maxCount","getPropertyValue","registerSeries","handleExtremesChange","selectionMin","selectionMax","allHidden","isHidden","outOfRange","visible","isHiding","seriesSelectionMin","seriesSelectionMax","minMaxStep2","syncAxes","declination","setCache","zoom","mw_1","pixelWidth","getX","location","stackKey","getPositionX","getWorkingValue","stack","getValue","getY","getPositionY","getAngle","getAnyRangePath","getPositionRangePath","getTooltipText","extraTooltipPrecision","valueStr","tooltip","zoomToValues","skipRangeEvent","instantly","axisBreakDif","axisBreakGridCount","breakMinMaxStep","getPositionLabel","showTooltipAt","showTooltipAtPosition","copyFrom","source","_disposers","push","once","count","currentCount","synced","c","diff","omin","omax","ostep","checkSync","processConfig","config","map","hasKey","getKey","processingErrors","xAxis","registeredClasses","ValueAxisBreak","AxisLabel","isMeasured","padding","setDisabled","changed","HeatLegend","markerContainer","createChild","shouldClone","markerCount","marker","minHeight","minWidth","interactionsEnabled","fillOpacity","cornerRadius","orientation","markers","template","getMinFromRules","minValue_1","heatRules","heatRule","getMaxFromRules","maxValue_1","valueAxis","inversed","reverseOrder","minColor","maxColor","seriesFill","minOpacity","maxOpacity","minStrokeOpacity","maxStrokeOpacity","minStroke","maxStroke","create","parent","height","width","gradient","addColor","rotation","strokeGradient","stroke","color","rgb","opacity","color_1","opacity_1","strokeOpacity","len","setColorProperty","pointerOrientation","layout","inside","axisFills","baseGrid","_valueAxis","_series","dataField","dataFieldDefined","err","updateMinMax","low","high","event","seriesId_1","disposer_1","ev","newValue","dispose","AxisRenderer","_chart","tooltipLocation","fullWidthTooltip","cellStartLocation","cellEndLocation","minLabelPosition","maxLabelPosition","gridContainer","virtualParent","invalidateAxisItems","breakContainer","bulletsContainer","line","disposers","ticks","_axis","setAxis","bind","processRenderer","updateTooltip","positionItem","item","moveTo","position2","positionToCoordinate","coordinate","axisFullLength","updateGridContainer","getHeight","pixelHeight","getWidth","coordinateToPosition","coordinate2","updateAxisLine","updateBaseGridElement","updateBreakElement","startLine","toggleVisibility","endLine","sprite","minPosition","maxPosition","updatedStart","updatedEnd","createBreakSprites","_axisFills","createFill","applyOnClones","_grid","createGrid","_ticks","createTick","_labels","createLabel","toAxisPosition","setVisibility","AxisRendererY","opposite","verticalCenter","pixelY","inversedPosition","relativePositionSprite","relativeY","innerHeight","relativeHeight","title","valign","toBack","toFront","bigNum","bbx","bby","bbw","bbh","pixelPaddingTop","pixelPaddingBottom","y1","y2","h","w","path","tickLength","_a","pixelX","hide","show","horizontalCenter","deltaX","maxWidth","align","fillShape","x1","pixelMarginLeft","x2","pixelMarginRight","wavedRectangle","setWavedSides","relevant","widthS","state","target","stateId","states","properties","widthXS","AxisRendererX","deltaY","maxHeight","pixelPaddingRight","pixelPaddingLeft","pixelMarginTop","pixelMarginBottom","relativeX","innerWidth","relativeWidth","heightXS","heightXXS","AxisLine","element","paper","add","interfaceColors","getFor","pixelPerfect","Grid","above","maybeXS","AxisFill","draw","fillPath","measure","setPath","attr","AxisBreak","marginLeft","marginRight","marginTop","marginBottom","zIndex","_fillShape","_startLine","_endLine","addBreakSprite","breakTemplate","Tick","nonScalingStroke","AxisBullet","AxisItemLocation","AxisDataItem","component_1","grid_1","clone","removeValue","sprites","addSprite","_tick","component_2","tick_1","_label","component_3","label_1","_axisFill","component_4","axisFill_1","isTemplate","_text","_mask","_contents","contents","_axisBreak","appendChildren","hasProperty","prop","noChangeValues","_bullet","Axis","autoDispose","constructor","hideTooltipWhileZooming","toggleZoomOutButton","zoomable","createNewItems","background","pointerLength","fitPointerToBounds","filters","clear","strokeWidth","readerHidden","preventShow","index","validateDataElements","validateLayout","_prevLength","initRenderer","axisRange","processBreak","moveValue","createMask","_renderer","chart","ghostLabel_1","hideTooltip","duration","_tooltipPosition","local","_tooltip","tooltipContainer","getCellStartPosition","getCellEndPosition","tooltipPosition","tooltipLocation2","currentItemStartPoint","currentItemEndPoint","globalPoint","delayedPointTo","cursorTooltipEnabled","toGlobalPosition","boundingRectangle","fixDoc","setBounds","roundPosition","axisLocation","_axisRanges","processAxisRange","a","b","processSeriesDataItem","postProcessSeriesDataItems","postProcessSeriesDataItem","updateAxisBySeries","dataItemsIterator","getSeriesDataItem","findNearest","seriesDataChangeUpdate","intersection","update","firstAxisBreak","first","previousEndValue_1","createSeriesRange","addDisposer","reset","configOrder","_title","AxisTick"],"mappings":"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","file":"js/chunk-b32be270.e9c97e3f.js","sourcesContent":["/**\r\n * Value Axis module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisDataItem } from \"./Axis\";\r\nimport { AxisRendererY } from \"./AxisRendererY\";\r\nimport { MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[ValueAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ValueAxisDataItem = /** @class */ (function (_super) {\r\n __extends(ValueAxisDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ValueAxisDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ValueAxisDataItem\";\r\n _this.values.value = {};\r\n _this.values.endValue = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ValueAxisDataItem.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 * A data point'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 Object.defineProperty(ValueAxisDataItem.prototype, \"endValue\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values[\"endValue\"].value;\r\n },\r\n /**\r\n * Data point's numeric end value.\r\n *\r\n * @param value End value\r\n */\r\n set: function (value) {\r\n this.setValue(\"endValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ValueAxisDataItem;\r\n}(AxisDataItem));\r\nexport { ValueAxisDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to create a value axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Monthly Sales\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Monthly Sales\";\r\n * ```\r\n * ```JSON\r\n * \"yAxes\": [{\r\n * \"type\": \"ValueAxis\",\r\n * \"title\": {\r\n * \"text\": \"Monthly Sales\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IValueAxisEvents} for a list of available Events\r\n * @see {@link IValueAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar ValueAxis = /** @class */ (function (_super) {\r\n __extends(ValueAxis, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ValueAxis() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * [_stepDecimalPlaces description]\r\n *\r\n * @todo Description\r\n */\r\n _this._stepDecimalPlaces = 0;\r\n _this._prevStepDecimalPlaces = 0;\r\n _this._adjustLabelPrecision = true;\r\n /**\r\n * Base value for the axis.\r\n */\r\n _this._baseValue = 0;\r\n /**\r\n * Adjusted start in case we have breaks.\r\n *\r\n * @todo Description\r\n */\r\n _this._adjustedStart = 0;\r\n /**\r\n * Adjusted end in case we have breaks.\r\n *\r\n * @todo Description\r\n */\r\n _this._adjustedEnd = 1;\r\n _this._extremesChanged = false;\r\n _this._deltaMinMax = 1;\r\n _this._dsc = false;\r\n /**\r\n * As calculating totals is expensive operation and not often needed, we\r\n * don't do it by default.\r\n *\r\n * In case you use `totalPercent` or `total` in your charts, this must be set\r\n * to `true`.\r\n *\r\n * @default false\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#100_stacks} For using `calculateTotals` for 100% stacked series.\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-strings/#Placeholders_for_numeric_values} For using `calculateTotals` in labels.\r\n */\r\n _this.calculateTotals = false;\r\n _this.className = \"ValueAxis\";\r\n // Set field name\r\n _this.axisFieldName = \"value\";\r\n // Set defaults\r\n _this.setPropertyValue(\"maxZoomFactor\", 1000);\r\n _this.setPropertyValue(\"extraMin\", 0);\r\n _this.setPropertyValue(\"extraMax\", 0);\r\n _this.setPropertyValue(\"strictMinMax\", false);\r\n _this.setPropertyValue(\"maxPrecision\", Number.MAX_VALUE);\r\n _this.setPropertyValue(\"adjustLabelPrecision\", true);\r\n _this.setPropertyValue(\"extraTooltipPrecision\", 0);\r\n _this.keepSelection = false;\r\n _this.includeRangesInMinMax = false;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Holds reference to a function that accepts a DataItem as parameter.\r\n *\r\n * It can either return a fill opacity for a fill, or manipulate data item\r\n * directly, to create various highlighting scenarios.\r\n */\r\n ValueAxis.prototype.fillRule = function (dataItem) {\r\n var value = dataItem.value;\r\n var axis = dataItem.component;\r\n if (!dataItem.axisFill.disabled) {\r\n // rounding in left to solve floating point number\r\n if ($math.round(value / axis.step / 2, 5) == Math.round(value / axis.step / 2)) {\r\n dataItem.axisFill.__disabled = true;\r\n }\r\n else {\r\n dataItem.axisFill.__disabled = false;\r\n }\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 ValueAxis.prototype.createDataItem = function () {\r\n return new ValueAxisDataItem();\r\n };\r\n /**\r\n * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n *\r\n * @return Axis break\r\n */\r\n ValueAxis.prototype.createAxisBreak = function () {\r\n return new ValueAxisBreak();\r\n };\r\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n ValueAxis.prototype.dataChangeUpdate = function () {\r\n this.clearCache();\r\n if (!this.keepSelection) {\r\n if (this._start != 0 || this._end != 1) {\r\n this._start = 0;\r\n this._end = 1;\r\n this.dispatchImmediately(\"startendchanged\");\r\n }\r\n }\r\n else {\r\n if (this._start != 0) {\r\n this.dispatchImmediately(\"startchanged\");\r\n }\r\n if (this._end != 1) {\r\n this.dispatchImmediately(\"endchanged\");\r\n }\r\n if (this._start != 0 || this._end != 1) {\r\n this.dispatchImmediately(\"startendchanged\");\r\n }\r\n }\r\n this._maxZoomed = this._maxDefined;\r\n this._minZoomed = this._minDefined;\r\n this._maxAdjusted = this._maxDefined;\r\n this._minAdjusted = this._minDefined;\r\n };\r\n /**\r\n * Processes data items of the related Series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ValueAxis.prototype.processSeriesDataItems = function () {\r\n // @todo: add some boolean (maybe autodedect) if we need these calculations or not. this place uses a lot of cpu\r\n if (this.calculateTotals) {\r\n var series = this.series.getIndex(0);\r\n var startIndex = series.startIndex;\r\n if (series.dataItems.length > 0) {\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n var endIndex = series.endIndex;\r\n if (endIndex < series.dataItems.length) {\r\n endIndex++;\r\n }\r\n var _loop_1 = function (i) {\r\n // This has to be `var` in order to avoid garbage collection\r\n var total = {};\r\n var sum = {};\r\n this_1.series.each(function (series) {\r\n if (!series.excludeFromTotal) {\r\n var dataItem_1 = series.dataItems.getIndex(i);\r\n if (dataItem_1) {\r\n $object.each(dataItem_1.values, function (key) {\r\n var value = dataItem_1.values[key].workingValue; // can not use getWorkingValue here!\r\n if ($type.isNumber(value)) {\r\n if (!$type.isNumber(total[key])) {\r\n total[key] = Math.abs(value);\r\n }\r\n else {\r\n total[key] += Math.abs(value);\r\n }\r\n if (!$type.isNumber(sum[key])) {\r\n sum[key] = value;\r\n }\r\n else {\r\n sum[key] += value;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n this_1.series.each(function (series) {\r\n if (!series.excludeFromTotal) {\r\n var dataItem_2 = series.dataItems.getIndex(i);\r\n if (dataItem_2) {\r\n $object.each(dataItem_2.values, function (key) {\r\n var value = dataItem_2.values[key].workingValue; // can not use getWorkingValue here!\r\n if ($type.isNumber(value)) {\r\n dataItem_2.setCalculatedValue(key, total[key], \"total\");\r\n dataItem_2.setCalculatedValue(key, 100 * value / total[key], \"totalPercent\");\r\n dataItem_2.setCalculatedValue(key, sum[key], \"sum\");\r\n }\r\n });\r\n }\r\n }\r\n });\r\n };\r\n var this_1 = this;\r\n // This has to be `var` in order to avoid garbage collection\r\n for (var i = startIndex; i < endIndex; ++i) {\r\n _loop_1(i);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Validates the whole axis. Causes it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\r\n ValueAxis.prototype.validate = function () {\r\n if (this.axisLength <= 0) {\r\n return;\r\n }\r\n _super.prototype.validate.call(this);\r\n this.getMinMax();\r\n if (!$type.isNumber(this._minAdjusted)) {\r\n this.dataItems.each(function (dataItem) {\r\n dataItem.value = null;\r\n });\r\n }\r\n this.fixAxisBreaks();\r\n this.calculateZoom();\r\n this.validateAxisElements();\r\n this.validateAxisRanges();\r\n this.validateBreaks();\r\n this.hideUnusedDataItems();\r\n this.renderer.invalidateLayout();\r\n // hide too close\r\n //this.hideTooCloseDataItems();\r\n };\r\n /**\r\n * Calculates all positions, related to axis as per current zoom.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ValueAxis.prototype.calculateZoom = function () {\r\n if ($type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n var min = this.positionToValue(this.start);\r\n var max = this.positionToValue(this.end);\r\n var differece = this.adjustDifference(min, max);\r\n var minMaxStep = this.adjustMinMax(min, max, differece, this._gridCount, true);\r\n var stepDecimalPlaces = $utils.decimalPlaces(minMaxStep.step);\r\n this._stepDecimalPlaces = stepDecimalPlaces;\r\n min = $math.round(min, stepDecimalPlaces);\r\n max = $math.round(max, stepDecimalPlaces);\r\n minMaxStep = this.adjustMinMax(min, max, differece, this._gridCount, true);\r\n var step = minMaxStep.step;\r\n if (this.syncWithAxis) {\r\n var calculated = this.getCache(min + \"-\" + max);\r\n if ($type.isNumber(calculated)) {\r\n step = calculated;\r\n }\r\n }\r\n else {\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n }\r\n if (this._minZoomed != min || this._maxZoomed != max || this._step != step || this._dsc) {\r\n this._dsc = false;\r\n this._minZoomed = min;\r\n this._maxZoomed = max;\r\n this._step = step;\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n }\r\n }\r\n };\r\n ValueAxis.prototype.fixSmallStep = function (step) {\r\n if (1 + step == 1) {\r\n step *= 2;\r\n return this.fixSmallStep(step);\r\n }\r\n return step;\r\n };\r\n /**\r\n * Validates Axis elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n ValueAxis.prototype.validateAxisElements = function () {\r\n var _this = this;\r\n if ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n // first regular items\r\n var value_1 = this.minZoomed - this._step * 2;\r\n if (!this.logarithmic) {\r\n value_1 = Math.floor(value_1 / this._step) * this._step;\r\n }\r\n else {\r\n var differencePower = Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E;\r\n if (differencePower > 1) {\r\n value_1 = Math.pow(10, Math.log(this.min) * Math.LOG10E);\r\n }\r\n else {\r\n value_1 = Math.floor(this.minZoomed / this._step) * this._step;\r\n if (value_1 == 0) {\r\n value_1 = this.minZoomed;\r\n }\r\n }\r\n }\r\n var maxZoomed = this._maxZoomed + this._step;\r\n this.resetIterators();\r\n var dataItemsIterator_1 = this._dataItemsIterator;\r\n if (this._step == 0) {\r\n return;\r\n }\r\n this._step = this.fixSmallStep(this._step);\r\n var i = 0;\r\n var precisionChanged = this._prevStepDecimalPlaces != this._stepDecimalPlaces;\r\n this._prevStepDecimalPlaces = this._stepDecimalPlaces;\r\n while (value_1 <= maxZoomed) {\r\n var axisBreak = this.isInBreak(value_1);\r\n if (!axisBreak) {\r\n var dataItem = dataItemsIterator_1.find(function (x) { return x.value === value_1; });\r\n if (dataItem.__disabled) {\r\n dataItem.__disabled = false;\r\n }\r\n //this.processDataItem(dataItem);\r\n this.appendDataItem(dataItem);\r\n dataItem.axisBreak = undefined;\r\n if (dataItem.value != value_1 || precisionChanged) {\r\n dataItem.value = value_1;\r\n dataItem.text = this.formatLabel(value_1);\r\n if (dataItem.label && dataItem.label.invalid) {\r\n dataItem.label.validate();\r\n }\r\n if (dataItem.value >= this.min && dataItem.value <= this.max) {\r\n if (dataItem.label) {\r\n if ((this.axisLetter == \"Y\" && dataItem.label.measuredWidth > this.ghostLabel.measuredWidth) || (this.axisLetter == \"X\" && dataItem.label.measuredHeight > this.ghostLabel.measuredHeight)) {\r\n this.ghostLabel.text = dataItem.label.currentText;\r\n this.ghostLabel.validate();\r\n }\r\n }\r\n }\r\n }\r\n this.validateDataElement(dataItem);\r\n }\r\n i++;\r\n var oldValue = value_1;\r\n if (!this.logarithmic) {\r\n value_1 += this._step;\r\n }\r\n else {\r\n var differencePower = Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E;\r\n if (differencePower > 1) {\r\n value_1 = Math.pow(10, Math.log(this.min) * Math.LOG10E + i);\r\n }\r\n else {\r\n value_1 += this._step;\r\n }\r\n }\r\n var stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(this._step)) * Math.LOG10E));\r\n if (stepPower < 1) {\r\n // exponent is less then 1 too. Count decimals of exponent\r\n var decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 2;\r\n decCount = Math.min(13, decCount);\r\n // round value to avoid floating point issues\r\n value_1 = $math.round(value_1, decCount);\r\n // ceil causes problems: https://codepen.io/team/amcharts/pen/XWMjZwy?editors=1010\r\n if (oldValue == value_1) {\r\n value_1 = maxZoomed;\r\n break;\r\n }\r\n }\r\n }\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks) {\r\n // breaks later\r\n var renderer_1 = this.renderer;\r\n $iter.each(axisBreaks.iterator(), function (axisBreak) {\r\n if (axisBreak.breakSize > 0) {\r\n // only add grid if gap is bigger then minGridDistance\r\n if ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer_1.minGridDistance) {\r\n var breakValue_1 = axisBreak.adjustedMin;\r\n while (breakValue_1 <= axisBreak.adjustedMax) {\r\n if (breakValue_1 >= axisBreak.adjustedStartValue && breakValue_1 <= axisBreak.adjustedEndValue) {\r\n var dataItem = dataItemsIterator_1.find(function (x) { return x.value === breakValue_1; });\r\n if (dataItem.__disabled) {\r\n dataItem.__disabled = false;\r\n }\r\n //this.processDataItem(dataItem);\r\n _this.appendDataItem(dataItem);\r\n dataItem.axisBreak = axisBreak;\r\n if (dataItem.value != breakValue_1) {\r\n dataItem.value = breakValue_1;\r\n dataItem.text = _this.formatLabel(breakValue_1);\r\n if (dataItem.label && dataItem.label.invalid) {\r\n dataItem.label.validate();\r\n }\r\n }\r\n _this.validateDataElement(dataItem);\r\n }\r\n breakValue_1 += axisBreak.adjustedStep;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Validates axis data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n ValueAxis.prototype.validateDataElement = function (dataItem) {\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n //dataItem.__disabled = false;\r\n dataItem.itemIndex = this._axisItemCount;\r\n this._axisItemCount++;\r\n var renderer = this.renderer;\r\n var value = dataItem.value;\r\n var endValue = dataItem.endValue;\r\n var position = this.valueToPosition(value);\r\n dataItem.position = position;\r\n var endPosition = position;\r\n var fillEndPosition = this.valueToPosition(value + this._step);\r\n if ($type.isNumber(endValue)) {\r\n endPosition = this.valueToPosition(endValue);\r\n fillEndPosition = endPosition;\r\n }\r\n // this point is needed to calculate distance to satisfy minGridDistance\r\n dataItem.point = renderer.positionToPoint(position);\r\n var tick = dataItem.tick;\r\n if (tick && !tick.disabled) {\r\n renderer.updateTickElement(tick, position, endPosition);\r\n }\r\n var grid = dataItem.grid;\r\n if (grid && !grid.disabled) {\r\n renderer.updateGridElement(grid, position, endPosition);\r\n }\r\n var label = dataItem.label;\r\n if (label && !label.disabled) {\r\n renderer.updateLabelElement(label, position, endPosition);\r\n }\r\n var fill = dataItem.axisFill;\r\n if (fill && !fill.disabled) {\r\n renderer.updateFillElement(fill, position, fillEndPosition);\r\n if (!dataItem.isRange) {\r\n this.fillRule(dataItem);\r\n }\r\n }\r\n if (dataItem.bullet) {\r\n renderer.updateBullet(dataItem.bullet, position, endPosition);\r\n }\r\n var mask = dataItem.mask;\r\n if (mask) {\r\n renderer.updateFillElement(mask, position, fillEndPosition);\r\n }\r\n };\r\n /**\r\n * Formats the value according to axis' own [[NumberFormatter]].\r\n *\r\n * @param value Source value\r\n * @return Formatted value\r\n */\r\n ValueAxis.prototype.formatLabel = function (value) {\r\n if (this.adjustLabelPrecision && value != 0) {\r\n return this.numberFormatter.format(value, undefined, this._stepDecimalPlaces);\r\n }\r\n else {\r\n return this.numberFormatter.format(value);\r\n }\r\n };\r\n Object.defineProperty(ValueAxis.prototype, \"basePoint\", {\r\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point\r\n */\r\n get: function () {\r\n var baseValue = this.baseValue;\r\n var position = this.valueToPosition(baseValue);\r\n var basePoint = this.renderer.positionToPoint(position);\r\n return basePoint;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"baseValue\", {\r\n /**\r\n * @return base value\r\n */\r\n get: function () {\r\n var baseValue = this._baseValue;\r\n if (this.logarithmic) {\r\n baseValue = this.min;\r\n }\r\n if (!this._adapterO) {\r\n return baseValue;\r\n }\r\n else {\r\n return this._adapterO.apply(\"baseValue\", baseValue);\r\n }\r\n },\r\n /**\r\n * A base value.\r\n *\r\n * This is a threshold value that will divide \"positive\" and \"negative\"\r\n * value ranges.\r\n *\r\n * Other scale-related functionality also depend on base value. E.g. stacks,\r\n * value-dependent coloring, etc.\r\n *\r\n * @param value Base value\r\n */\r\n set: function (value) {\r\n this._baseValue = value;\r\n this.invalidateLayout();\r\n this.invalidateSeries();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts a numeric value to relative position on axis\r\n *\r\n * An alias to `valueToPosition()`.\r\n *\r\n * @param value Value\r\n * @return Position\r\n */\r\n ValueAxis.prototype.anyToPosition = function (value) {\r\n return this.valueToPosition(value);\r\n };\r\n /**\r\n * Converts a numeric value to orientation point (x, y, angle) on axis\r\n *\r\n * @param value Value\r\n * @return Orientation point\r\n */\r\n ValueAxis.prototype.valueToPoint = function (value) {\r\n var position = this.valueToPosition(value);\r\n var point = this.renderer.positionToPoint(position);\r\n var angle = this.renderer.positionToAngle(position);\r\n return { x: point.x, y: point.y, angle: angle };\r\n };\r\n /**\r\n * Converts a numeric value to orientation (x, y, angle) point on axis\r\n *\r\n * @param value Value\r\n * @return Orientation point\r\n */\r\n ValueAxis.prototype.anyToPoint = function (value) {\r\n return this.valueToPoint(value);\r\n };\r\n /**\r\n * Converts a numeric value to relative position on axis.\r\n *\r\n * @param value Value\r\n * @return relative position\r\n */\r\n ValueAxis.prototype.valueToPosition = function (value) {\r\n if ($type.isNumber(value)) {\r\n // todo: think if possible to take previous value and do not go through all previous breaks\r\n var min_1 = this.min;\r\n var max_1 = this.max;\r\n if ($type.isNumber(min_1) && $type.isNumber(max_1)) {\r\n var difference = this._difference;\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks && axisBreaks.length > 0) {\r\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\r\n var startValue = axisBreak.adjustedStartValue;\r\n var endValue = axisBreak.adjustedEndValue;\r\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\r\n if (value < startValue) {\r\n return false;\r\n }\r\n if ($math.intersect({ start: startValue, end: endValue }, { start: min_1, end: max_1 })) { // todo: check this once and set some flag in axisBreak\r\n startValue = Math.max(startValue, min_1);\r\n endValue = Math.min(endValue, max_1);\r\n var breakSize = axisBreak.breakSize;\r\n // value to the right of break end\r\n if (value > endValue) {\r\n min_1 += (endValue - startValue) * (1 - breakSize); // todo: maybe this can be done differently?\r\n }\r\n // value to the left of break start\r\n else if (value < startValue) {\r\n }\r\n // value within break\r\n else {\r\n value = startValue + (value - startValue) * breakSize;\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n var position = void 0;\r\n if (!this.logarithmic) {\r\n position = (value - min_1) / difference;\r\n }\r\n else {\r\n var treatZeroAs = this.treatZeroAs;\r\n if ($type.isNumber(treatZeroAs)) {\r\n if (value <= treatZeroAs) {\r\n value = treatZeroAs;\r\n }\r\n }\r\n position = (Math.log(value) * Math.LOG10E - Math.log(this.min) * Math.LOG10E) / ((Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E));\r\n }\r\n //position = $math.round(position, 10);\r\n return position;\r\n }\r\n }\r\n return 0;\r\n };\r\n /**\r\n * When fontSize of fontFamily changes we need to hard-invalidate all Labels of this container to position them properly.\r\n */\r\n ValueAxis.prototype.invalidateLabels = function () {\r\n _super.prototype.invalidateLabels.call(this);\r\n if (this.dataItems) {\r\n this.dataItems.each(function (dataItem) {\r\n dataItem.value = undefined;\r\n });\r\n this.invalidate();\r\n }\r\n };\r\n /**\r\n * Converts an relative position to a corresponding value within\r\n * axis' scale.\r\n *\r\n * @param position Position (px)\r\n * @return Value\r\n */\r\n ValueAxis.prototype.positionToValue = function (position) {\r\n var min = this.min;\r\n var max = this.max;\r\n if ($type.isNumber(min) && $type.isNumber(max)) {\r\n var difference_1 = max - min; //no need to adjust!\r\n var value_2 = null;\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks) {\r\n // in case we have some axis breaks\r\n if (axisBreaks.length > 0) {\r\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\r\n var breakStartPosition = axisBreak.startPosition;\r\n var breakEndPosition = axisBreak.endPosition;\r\n var breakStartValue = axisBreak.adjustedStartValue;\r\n var breakEndValue = axisBreak.adjustedEndValue;\r\n if ($type.isNumber(breakStartValue) && $type.isNumber(breakEndValue)) {\r\n if (breakStartValue > max) {\r\n return false;\r\n }\r\n if ($math.intersect({ start: breakStartValue, end: breakEndValue }, { start: min, end: max })) {\r\n breakStartValue = $math.max(breakStartValue, min);\r\n breakEndValue = $math.min(breakEndValue, max);\r\n var breakSize = axisBreak.breakSize;\r\n difference_1 -= (breakEndValue - breakStartValue) * (1 - breakSize);\r\n // position to the right of break end\r\n if (position > breakEndPosition) {\r\n min += (breakEndValue - breakStartValue) * (1 - breakSize);\r\n }\r\n // position to the left of break start\r\n else if (position < breakStartPosition) {\r\n }\r\n // value within break\r\n else {\r\n var breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n value_2 = breakStartValue + breakPosition * (breakEndValue - breakStartValue);\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n }\r\n if (!$type.isNumber(value_2)) {\r\n if (this.logarithmic) {\r\n value_2 = Math.pow(Math.E, (position * ((Math.log(this.max) * Math.LOG10E - Math.log(this.min) * Math.LOG10E)) + Math.log(this.min) * Math.LOG10E) / Math.LOG10E);\r\n }\r\n else {\r\n value_2 = position * difference_1 + min;\r\n }\r\n }\r\n return value_2;\r\n }\r\n //}\r\n };\r\n /**\r\n * Converts an X coordinate to a relative value in axis' scale.\r\n *\r\n * @param x X (px)\r\n * @return Value\r\n */\r\n ValueAxis.prototype.xToValue = function (x) {\r\n return this.positionToValue(this.pointToPosition({ x: x, y: 0 }));\r\n };\r\n /**\r\n * Converts an Y coordinate to a relative value in axis' scale.\r\n *\r\n * @param y Y (px)\r\n * @return Value\r\n */\r\n ValueAxis.prototype.yToValue = function (y) {\r\n return this.positionToValue(this.pointToPosition({ x: 0, y: y }));\r\n };\r\n /**\r\n * Converts pixel coordinates to a relative position. (0-1)\r\n *\r\n * @param point Coorinates (px)\r\n * @return Position (0-1)\r\n */\r\n ValueAxis.prototype.pointToPosition = function (point) {\r\n if (this.renderer instanceof AxisRendererY) {\r\n return 1 - this.renderer.pointToPosition(point);\r\n }\r\n else {\r\n return this.renderer.pointToPosition(point);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ValueAxis.prototype.animateMinMax = function (min, max) {\r\n return this.animate([{ property: \"_minAdjusted\", from: this._minAdjusted, to: min }, { property: \"_maxAdjusted\", from: this._maxAdjusted, to: max }], this.rangeChangeDuration, this.rangeChangeEasing);\r\n };\r\n /**\r\n * Calculates smallest and biggest value for the axis scale.\r\n * @ignore\r\n * @todo Description (review)\r\n */\r\n ValueAxis.prototype.getMinMax = function () {\r\n var _this = this;\r\n this.updateGridCount();\r\n var min = Number.POSITIVE_INFINITY;\r\n var max = Number.NEGATIVE_INFINITY;\r\n // only if min and max are not set from outside, we go through min and max influencers\r\n if (!$type.isNumber(this._minDefined) || !$type.isNumber(this._maxDefined)) {\r\n this.series.each(function (series) {\r\n if (!series.ignoreMinMax) {\r\n // check min\r\n var seriesMin = series.min(_this);\r\n if ($type.isNumber(seriesMin) && (seriesMin < min)) {\r\n min = seriesMin;\r\n }\r\n // check max\r\n var seriesMax = series.max(_this);\r\n if ($type.isNumber(seriesMax) && (seriesMax > max)) {\r\n max = seriesMax;\r\n }\r\n }\r\n });\r\n if (this.includeRangesInMinMax) {\r\n this.axisRanges.each(function (range) {\r\n if (!range.ignoreMinMax) {\r\n var minValue = $math.min(range.value, range.endValue);\r\n var maxValue = $math.max(range.value, range.endValue);\r\n if (minValue < min || !$type.isNumber(min)) {\r\n min = minValue;\r\n }\r\n if (maxValue > max || !$type.isNumber(max)) {\r\n max = maxValue;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n if (this.logarithmic) {\r\n var treatZeroAs = this.treatZeroAs;\r\n if ($type.isNumber(treatZeroAs)) {\r\n if (min <= 0) {\r\n min = treatZeroAs;\r\n }\r\n }\r\n if (min <= 0) {\r\n this.raiseCriticalError(new Error(\"Logarithmic value axis can not have values <= 0.\"), true);\r\n }\r\n }\r\n if (min == 0 && max == 0) {\r\n max = 0.9;\r\n min = -0.9;\r\n }\r\n // if defined from outside\r\n if ($type.isNumber(this._minDefined)) {\r\n min = this._minDefined;\r\n }\r\n if ($type.isNumber(this._maxDefined)) {\r\n max = this._maxDefined;\r\n }\r\n if (this._adapterO) {\r\n min = this._adapterO.apply(\"min\", min);\r\n }\r\n if (this._adapterO) {\r\n max = this._adapterO.apply(\"max\", max);\r\n }\r\n if (!$type.isNumber(min) || !$type.isNumber(max)) {\r\n return;\r\n }\r\n this._minReal = min;\r\n this._maxReal = max;\r\n if (min == Number.POSITIVE_INFINITY) {\r\n min = undefined;\r\n }\r\n if (max == Number.NEGATIVE_INFINITY) {\r\n max = undefined;\r\n }\r\n var dif = this.adjustDifference(min, max); // previously it was max-min, but not worked well\r\n min = this.fixMin(min);\r\n max = this.fixMax(max);\r\n // this happens if starLocation and endLocation are 0.5 and DateAxis has only one date\r\n if (max - min <= 1 / Math.pow(10, 15)) {\r\n if (max - min != 0) {\r\n this._deltaMinMax = (max - min) / 2;\r\n }\r\n else {\r\n // the number by which we need to raise 10 to get difference\r\n var exponent = Math.log(Math.abs(max)) * Math.LOG10E;\r\n // here we find a number which is power of 10 and has the same count of numbers as difference has\r\n var power = Math.pow(10, Math.floor(exponent));\r\n // reduce this number by 10 times\r\n power = power / 10;\r\n this._deltaMinMax = power;\r\n }\r\n min -= this._deltaMinMax;\r\n max += this._deltaMinMax;\r\n }\r\n min -= (max - min) * this.extraMin;\r\n max += (max - min) * this.extraMax;\r\n var strict = this.strictMinMax;\r\n if ($type.isNumber(this._maxDefined)) {\r\n strict = true;\r\n }\r\n var minMaxStep = this.adjustMinMax(min, max, dif, this._gridCount, strict);\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n dif = max - min; //new\r\n // do it for the second time (importat!)\r\n minMaxStep = this.adjustMinMax(min, max, max - min, this._gridCount, true);\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n // return min max if strict\r\n if (this.strictMinMax) {\r\n if ($type.isNumber(this._minDefined)) {\r\n min = this._minDefined;\r\n }\r\n else {\r\n min = this._minReal;\r\n }\r\n if ($type.isNumber(this._maxDefined)) {\r\n max = this._maxDefined;\r\n }\r\n else {\r\n max = this._maxReal;\r\n }\r\n if (max - min <= 0.00000001) {\r\n min -= this._deltaMinMax;\r\n max += this._deltaMinMax;\r\n }\r\n min -= (max - min) * this.extraMin;\r\n max += (max - min) * this.extraMax;\r\n }\r\n if (this._adapterO) {\r\n min = this._adapterO.apply(\"min\", min);\r\n }\r\n if (this._adapterO) {\r\n max = this._adapterO.apply(\"max\", max);\r\n }\r\n this._step = minMaxStep.step;\r\n if (!$type.isNumber(min) && !$type.isNumber(max)) {\r\n this.start = 0;\r\n this.end = 1;\r\n this.renderer.labels.each(function (label) {\r\n label.dataItem.text = \"\";\r\n });\r\n }\r\n // checking isNumber is good when all series are hidden\r\n if ((this._minAdjusted != min || this._maxAdjusted != max) && $type.isNumber(min) && $type.isNumber(max)) {\r\n var animation = this._minMaxAnimation;\r\n if (this._extremesChanged && $type.isNumber(this._minAdjusted) && $type.isNumber(this._maxAdjusted) && this.inited) {\r\n if ((animation && !animation.isFinished()) && this._finalMax == max && this._finalMin == min) {\r\n return;\r\n }\r\n else {\r\n this._finalMin = min;\r\n this._finalMax = max;\r\n animation = this.animateMinMax(min, max);\r\n if (animation && !animation.isFinished()) {\r\n animation.events.on(\"animationprogress\", this.validateDataItems, this);\r\n animation.events.on(\"animationended\", function () {\r\n //this.validateDataItems();\r\n _this.series.each(function (series) {\r\n series.validate();\r\n });\r\n _this.validateDataItems();\r\n _this.handleSelectionExtremesChange();\r\n });\r\n this._minMaxAnimation = animation;\r\n }\r\n else {\r\n this.series.each(function (series) {\r\n series.invalidate();\r\n });\r\n }\r\n this.validateDataItems();\r\n this.dispatchImmediately(\"extremeschanged\");\r\n this.handleSelectionExtremesChange();\r\n }\r\n }\r\n else {\r\n if ((animation && !animation.isFinished()) && this._finalMax == max && this._finalMin == min) {\r\n return;\r\n }\r\n else {\r\n this._minAdjusted = min;\r\n this._maxAdjusted = max;\r\n this._finalMin = min;\r\n this._finalMax = max;\r\n this.invalidateDataItems();\r\n this.dispatchImmediately(\"extremeschanged\");\r\n }\r\n }\r\n }\r\n this._extremesChanged = false;\r\n this._difference = this.adjustDifference(min, max);\r\n };\r\n /**\r\n * Adjusts the minimum value.\r\n *\r\n * This is a placeholder method for extending classes to override.\r\n *\r\n * For numeric values this does nothing, however for more complex types, like\r\n * dates, it may be necessary to adjust.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\r\n ValueAxis.prototype.fixMin = function (value) {\r\n return value;\r\n };\r\n /**\r\n * Adjusts the maximum value.\r\n *\r\n * This is a placeholder method for extending classes to override.\r\n *\r\n * For numeric values this does nothing, however for more complex types, like\r\n * dates, it may be necessary to adjust.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\r\n ValueAxis.prototype.fixMax = function (value) {\r\n return value;\r\n };\r\n /**\r\n * Adjusts actual min and max scale values so that the axis starts and ends\r\n * at \"nice\" values, unless `strictMinMax` is set.\r\n *\r\n * The `difference` can be something else than `max - min`, because of the\r\n * axis breaks.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param min [description]\r\n * @param max [description]\r\n * @param difference [description]\r\n * @param gridCount [description]\r\n * @param strictMode [description]\r\n * @return [description]\r\n */\r\n ValueAxis.prototype.adjustMinMax = function (min, max, difference, gridCount, strictMode) {\r\n // will fail if 0\r\n if (gridCount <= 1) {\r\n gridCount = 1;\r\n }\r\n gridCount = Math.round(gridCount);\r\n var initialMin = min;\r\n var initialMax = max;\r\n // in case min and max is the same, use max\r\n if (difference === 0) {\r\n difference = Math.abs(max);\r\n }\r\n // the number by which we need to raise 10 to get difference\r\n var exponent = Math.log(Math.abs(difference)) * Math.LOG10E;\r\n // here we find a number which is power of 10 and has the same count of numbers as difference has\r\n var power = Math.pow(10, Math.floor(exponent));\r\n // reduce this number by 10 times\r\n power = power / 10;\r\n var extra = power;\r\n if (strictMode) {\r\n extra = 0;\r\n }\r\n if (!this.logarithmic) {\r\n // round down min\r\n if (strictMode) {\r\n min = Math.floor(min / power) * power;\r\n // round up max\r\n max = Math.ceil(max / power) * power;\r\n }\r\n else {\r\n min = Math.ceil(min / power) * power - extra;\r\n // round up max\r\n max = Math.floor(max / power) * power + extra;\r\n }\r\n // don't let min go below 0 if real min is >= 0\r\n if (min < 0 && initialMin >= 0) {\r\n min = 0;\r\n }\r\n // don't let max go above 0 if real max is <= 0\r\n if (max > 0 && initialMax <= 0) {\r\n max = 0;\r\n }\r\n }\r\n else {\r\n if (min <= 0) {\r\n //throw Error(\"Logarithmic value axis can not have values <= 0.\");\r\n min = this.baseValue;\r\n }\r\n // @todo: think of a better way or to restrict zooming when no series are selected\r\n if (min == Infinity) {\r\n min = 1;\r\n }\r\n if (max == -Infinity) {\r\n max = 10;\r\n }\r\n if (this.strictMinMax) {\r\n if (this._minDefined > 0) {\r\n min = this._minDefined;\r\n }\r\n else {\r\n min = min;\r\n }\r\n if (this._maxDefined > 0) {\r\n max = max;\r\n }\r\n }\r\n else {\r\n min = Math.pow(10, Math.floor(Math.log(Math.abs(min)) * Math.LOG10E));\r\n max = Math.pow(10, Math.ceil(Math.log(Math.abs(max)) * Math.LOG10E));\r\n }\r\n }\r\n // repeat diff, exponent and power again with rounded values\r\n //difference = this.adjustDifference(min, max);\r\n /*\r\n\r\n if(min > initialMin){\r\n min = initialMin;\r\n }\r\n\r\n if(max < initialMax){\r\n max = initialMax;\r\n }\r\n */\r\n exponent = Math.log(Math.abs(difference)) * Math.LOG10E;\r\n power = Math.pow(10, Math.floor(exponent));\r\n power = power / 10;\r\n // approximate difference between two grid lines\r\n var step = Math.ceil((difference / gridCount) / power) * power;\r\n var stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(step)) * Math.LOG10E));\r\n // TODO: in v3 I had fixStepE here, ommiting it for a while, need to think about other solution\r\n // the step should divide by 2, 5, and 10.\r\n var stepDivisor = Math.ceil(step / stepPower); // number 0 - 10\r\n if (stepDivisor > 5) {\r\n stepDivisor = 10;\r\n }\r\n else if (stepDivisor <= 5 && stepDivisor > 2) {\r\n stepDivisor = 5;\r\n }\r\n // now get real step\r\n step = Math.ceil(step / (stepPower * stepDivisor)) * stepPower * stepDivisor;\r\n if (this.maxPrecision < Number.MAX_VALUE && step != $math.ceil(step, this.maxPrecision)) {\r\n step = $math.ceil(step, this.maxPrecision);\r\n }\r\n var decCount = 0;\r\n // in case numbers are smaller than 1\r\n if (stepPower < 1) {\r\n // exponent is less then 1 too. Count decimals of exponent\r\n decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 1;\r\n // round step\r\n step = $math.round(step, decCount);\r\n }\r\n if (!this.logarithmic) {\r\n // final min and max\r\n var minCount = Math.floor(min / step);\r\n min = $math.round(step * minCount, decCount);\r\n var maxCount = void 0;\r\n if (!strictMode) {\r\n maxCount = Math.ceil(max / step);\r\n }\r\n else {\r\n maxCount = Math.floor(max / step);\r\n }\r\n if (maxCount == minCount) {\r\n maxCount++;\r\n }\r\n max = $math.round(step * maxCount, decCount);\r\n if (max < initialMax) {\r\n max = max + step;\r\n }\r\n if (min > initialMin) {\r\n min = min - step;\r\n }\r\n }\r\n return { min: min, max: max, step: step };\r\n };\r\n Object.defineProperty(ValueAxis.prototype, \"min\", {\r\n /**\r\n * @return Min value\r\n */\r\n get: function () {\r\n var min = this._minAdjusted;\r\n if (!$type.isNumber(min)) {\r\n min = this._minDefined;\r\n }\r\n return min;\r\n },\r\n /**\r\n * A minimum value for the axis scale.\r\n *\r\n * This value might be auto-adjusted by the Axis in order to accomodate the\r\n * grid nicely, i.e. plot area is divided by grid in nice equal cells.\r\n *\r\n * The above might be overridden by `strictMinMax` which will force exact\r\n * user-defined min and max values to be used for scale.\r\n *\r\n * @param value Min value\r\n */\r\n set: function (value) {\r\n if (this._minDefined != value) {\r\n this._minDefined = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"minDefined\", {\r\n /**\r\n * Min value as defined by user's code, not auto-calculated.\r\n *\r\n * @readonly\r\n * @return Min value\r\n */\r\n get: function () {\r\n return this._minDefined;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"maxDefined\", {\r\n /**\r\n * Max value as defined by user's code, not auto-calculated.\r\n *\r\n * @readonly\r\n * @return Man value\r\n */\r\n get: function () {\r\n return this._maxDefined;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"extraMin\", {\r\n /**\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"extraMin\");\r\n },\r\n /**\r\n * Allows relatively adjusting minimum value of the axis' scale.\r\n *\r\n * The value is relative to the actual range of values currently displayed\r\n * on the axis.\r\n *\r\n * E.g.: 0.5 will mean half of the current range. If we have axis displaying\r\n * from 100 to 200, we will now have axis displaying from 50 to 200 because\r\n * we asked to expand minimum value by 50% (0.5).\r\n *\r\n * NOTE: this setting is not compatible with `strictMinMax`.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"extraMin\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"extraMax\", {\r\n /**\r\n * @return Min multiplier\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"extraMax\");\r\n },\r\n /**\r\n * Allows relatively adjusting maximum value of the axis' scale.\r\n *\r\n * The value is relative to the actual range of values currently displayed\r\n * on the axis.\r\n *\r\n * E.g.: 0.5 will mean half of the current range. If we have axis displaying\r\n * from 100 to 200, we will now have axis displaying from 100 to 250 because\r\n * we asked to expand maximum value by 50% (0.5).\r\n *\r\n * NOTE: this setting is not compatible with `strictMinMax`.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"extraMax\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"step\", {\r\n /**\r\n * Current calculated delta in values between two adjacent grid lines (step).\r\n *\r\n * This is a read-only value and cannot be used to set actual step.\r\n *\r\n * @readonly\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/#Setting_the_density_of_the_the_grid_labels} For more information about modifying density of labels\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._step;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"max\", {\r\n /**\r\n * @return Max value\r\n */\r\n get: function () {\r\n var max = this._maxAdjusted;\r\n if (!$type.isNumber(max)) {\r\n max = this._maxDefined;\r\n }\r\n return max;\r\n },\r\n /**\r\n * A maximum value for the axis scale.\r\n *\r\n * This value might be auto-adjusted by the Axis in order to accomodate the\r\n * grid nicely, i.e. plot area is divided by grid in nice equal cells.\r\n *\r\n * The above might be overridden by `strictMinMax` which will force exact\r\n * user-defined min and max values to be used for scale.\r\n *\r\n * @param value Max value\r\n */\r\n set: function (value) {\r\n if (this._maxDefined != value) {\r\n this._maxDefined = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"adjustLabelPrecision\", {\r\n /**\r\n * @return Adjust precision\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"adjustLabelPrecision\");\r\n },\r\n /**\r\n * By default the axis will adjust precision of all numbers to match number\r\n * of decimals in all its labels, e.g.: `1.0`, `1.5`, `2.0`.\r\n *\r\n * To disable set `adjustLabelPrecision` to `false`, to use whatever other\r\n * precision or number format settings are set.\r\n *\r\n * IMPORTANT: This setting will be ignored if your number format uses\r\n * modifiers, e.g. `\"#a\"`.\r\n *\r\n * @default true\r\n * @since 4.9.14\r\n * @param value Adjust precision\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"adjustLabelPrecision\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Used for the Series to register itself as the user of this Axis.\r\n *\r\n * This will also decorate both the Series and Axis with event handlers, used\r\n * to redraw on Axis position/zoom change.\r\n *\r\n * A disposer for those events is returned, so that they can be disposed\r\n * together with Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param series Series\r\n * @return Disposer for events\r\n */\r\n ValueAxis.prototype.registerSeries = function (series) {\r\n return new MultiDisposer([\r\n _super.prototype.registerSeries.call(this, series),\r\n series.events.on(\"extremeschanged\", this.handleExtremesChange, this, false),\r\n series.events.on(\"selectionextremeschanged\", this.handleSelectionExtremesChange, this, false),\r\n this.events.on(\"extremeschanged\", series.invalidate, series, false)\r\n ]);\r\n };\r\n /**\r\n * Perform tasks after Axis zoom.\r\n */\r\n ValueAxis.prototype.handleSelectionExtremesChange = function () {\r\n var _this = this;\r\n var selectionMin;\r\n var selectionMax;\r\n var allHidden = true;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.ignoreMinMax && !series.isHidden && !series.outOfRange) {\r\n if (series.visible && !series.isHiding) {\r\n allHidden = false;\r\n }\r\n var seriesSelectionMin = series.selectionMin(_this);\r\n var seriesSelectionMax = series.selectionMax(_this);\r\n if ($type.isNumber(seriesSelectionMin)) {\r\n if (!$type.isNumber(selectionMin) || (seriesSelectionMin < selectionMin)) {\r\n selectionMin = seriesSelectionMin;\r\n }\r\n }\r\n // check max\r\n if ($type.isNumber(seriesSelectionMax)) {\r\n if (!$type.isNumber(selectionMax) || (seriesSelectionMax > selectionMax)) {\r\n selectionMax = seriesSelectionMax;\r\n }\r\n }\r\n }\r\n });\r\n if (this.includeRangesInMinMax) {\r\n this.axisRanges.each(function (range) {\r\n if (!range.ignoreMinMax) {\r\n var minValue = $math.min(range.value, range.endValue);\r\n var maxValue = $math.max(range.value, range.endValue);\r\n if (minValue < selectionMin) {\r\n selectionMin = minValue;\r\n }\r\n if (maxValue > selectionMax) {\r\n selectionMax = maxValue;\r\n }\r\n }\r\n });\r\n }\r\n // this is not good, as if date axis is initially zoomed, selection of y axis is reset to 0, 1 at the end of this method\r\n //$iter.each(this.series.iterator(), (series) => {\r\n //\tif (!series.appeared) {\r\n //\t\tallHidden = true;\r\n //\t}\r\n //})\r\n if ($type.isNumber(this._minDefined)) {\r\n if (this.strictMinMax) {\r\n selectionMin = this._minDefined;\r\n }\r\n else {\r\n selectionMin = this.min;\r\n }\r\n }\r\n else if (this.strictMinMax) {\r\n selectionMin = this._minReal;\r\n }\r\n if ($type.isNumber(this._maxDefined)) {\r\n if (this.strictMinMax) {\r\n selectionMax = this._maxDefined;\r\n }\r\n else {\r\n selectionMax = this.max;\r\n }\r\n }\r\n else if (this.strictMinMax) {\r\n selectionMax = this._maxReal;\r\n }\r\n if (selectionMin == selectionMax) {\r\n selectionMin -= this._deltaMinMax;\r\n selectionMax += this._deltaMinMax;\r\n var minMaxStep2 = this.adjustMinMax(selectionMin, selectionMax, 0, this._gridCount, this.strictMinMax);\r\n selectionMin = minMaxStep2.min;\r\n selectionMax = minMaxStep2.max;\r\n }\r\n var dif = this.adjustDifference(selectionMin, selectionMax);\r\n var minMaxStep = this.adjustMinMax(selectionMin, selectionMax, dif, this._gridCount);\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n selectionMin -= (selectionMax - selectionMin) * this.extraMin;\r\n selectionMax += (selectionMax - selectionMin) * this.extraMax;\r\n selectionMin = $math.fitToRange(selectionMin, this.min, this.max);\r\n selectionMax = $math.fitToRange(selectionMax, this.min, this.max);\r\n // do it for the second time !important\r\n dif = this.adjustDifference(selectionMin, selectionMax);\r\n minMaxStep = this.adjustMinMax(selectionMin, selectionMax, dif, this._gridCount, true);\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n if (this.strictMinMax) {\r\n selectionMin = $math.max(selectionMin, this._minDefined);\r\n selectionMax = $math.min(selectionMax, this._maxDefined);\r\n }\r\n var step = minMaxStep.step;\r\n if (this.syncWithAxis) {\r\n minMaxStep = this.syncAxes(selectionMin, selectionMax, step);\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n this.invalidate();\r\n }\r\n step = minMaxStep.step;\r\n // needed because of grouping\r\n this._difference = this.adjustDifference(this.min, this.max);\r\n var start = this.valueToPosition(selectionMin);\r\n var end = this.valueToPosition(selectionMax);\r\n // in case all series are hidden or hiding, full zoomout\r\n if (allHidden && !this.syncWithAxis) {\r\n start = 0;\r\n end = 1;\r\n }\r\n var declination = 0;\r\n if (this.syncWithAxis) {\r\n declination = 5;\r\n this.setCache(selectionMin + \"-\" + selectionMax, step);\r\n }\r\n else {\r\n if (this._step != step || this._minZoomed != selectionMin || this._maxZoomed != selectionMax) {\r\n this._dsc = true;\r\n }\r\n this._step = step;\r\n this._minZoomed = selectionMin;\r\n this._maxZoomed = selectionMax;\r\n }\r\n if (!this.keepSelection) {\r\n this.zoom({ start: start, end: end }, false, false, declination);\r\n }\r\n };\r\n Object.defineProperty(ValueAxis.prototype, \"strictMinMax\", {\r\n /**\r\n * @return Use exact values?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"strictMinMax\");\r\n },\r\n /**\r\n * Indicates whether to blindly use exact `min` and `max` values set by user\r\n * when generating Axis scale.\r\n *\r\n * If not set, the Axis might slightly adjust those values to accomodate a\r\n * better looking grid.\r\n *\r\n * NOTE: if `min` and `max` are not set, setting `strictMinMax` to `true`\r\n * will result in fixing the scale of the axis to actual lowest and highest\r\n * values in the series within currently selected scope.\r\n *\r\n * @default false\r\n * @param value Use exact values?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"strictMinMax\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"logarithmic\", {\r\n /**\r\n * @return Logarithmic scale?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"logarithmic\");\r\n },\r\n /**\r\n * Indicates if this axis should use a logarithmic scale.\r\n *\r\n * Please note that logarithmic axis can **only** accommodate values bigger\r\n * than zero.\r\n *\r\n * Having zero or negative values will result in error and failure of the\r\n * whole chart.\r\n *\r\n * @param value Logarithmic scale?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"logarithmic\", value)) {\r\n this.invalidate();\r\n this.series.each(function (series) {\r\n series.invalidateDataItems();\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"keepSelection\", {\r\n /**\r\n * @return Preseve zoom after data update?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"keepSelection\");\r\n },\r\n /**\r\n * Indicates if a current selection (zoom) should be kept across data updates.\r\n *\r\n * If your axis is zoomed while chart's data is updated, the axis will try\r\n * to retain the same start and end values.\r\n *\r\n * You can also use this to initially pre-zoom axis:\r\n *\r\n * ```TypeScript\r\n * axis.keepSelection = true;\r\n * axis.start = 0.5;\r\n * axis.end = 0.7;\r\n * ```\r\n * ```JavaScript\r\n * axis.keepSelection = true;\r\n * axis.start = 0.5;\r\n * axis.end = 0.7;\r\n * ```\r\n * ```JSON\r\n * {\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"keepSelection\": true,\r\n * \"start\": 0.5,\r\n * \"end\": 0.7\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above will start the chart zoomed from the middle of the actual scope\r\n * to 70%.\r\n *\r\n * @since 4.1.1\r\n * @default false\r\n * @param value Preseve zoom after data update?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"keepSelection\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"includeRangesInMinMax\", {\r\n /**\r\n * @return Include ranges?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"includeRangesInMinMax\");\r\n },\r\n /**\r\n * If set to `true`, values of axis ranges will be included when calculating\r\n * range of values / scale of the [[ValueAxis]].\r\n *\r\n * @default false\r\n * @since 4.4.9\r\n * @param value Include ranges?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"includeRangesInMinMax\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"maxPrecision\", {\r\n /**\r\n * @return max precision\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxPrecision\");\r\n },\r\n /**\r\n * Maximum number of decimals to allow when placing grid lines and labels\r\n * on axis.\r\n *\r\n * Set it to `0` (zero) to force integer-only axis labels.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"maxPrecision\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"extraTooltipPrecision\", {\r\n /**\r\n * @return Extra decimals\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"extraTooltipPrecision\");\r\n },\r\n /**\r\n * This setting allows using bigger precision for numbers displayed in axis\r\n * tooltip.\r\n *\r\n * Please note that this setting indicates additional decimal places to\r\n * automatically-calculated axis number precision.\r\n *\r\n * So if your axis displays numbers like 0.1, 0.2, etc. (one decimal place),\r\n * and you set `extraTooltipPrecision = 1`, tooltips will display numbers\r\n * like 0.12, 0.25, etc. (two decimal places).\r\n *\r\n * @default 0\r\n * @since 4.8.3\r\n * @param value Extra decimals\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"extraTooltipPrecision\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Invalidates axis data items when series extremes change\r\n */\r\n ValueAxis.prototype.handleExtremesChange = function () {\r\n var _this = this;\r\n this._extremesChanged = true;\r\n this.getMinMax();\r\n if (this.ghostLabel) {\r\n var mw_1 = 0;\r\n this.dataItems.each(function (dataItem) {\r\n if (dataItem.label && dataItem.label.pixelWidth > mw_1) {\r\n _this.ghostLabel.text = dataItem.label.currentText;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Returns relative position on axis for series' data item's value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey ?\r\n * @return X coordinate (px)\r\n */\r\n ValueAxis.prototype.getX = function (dataItem, key, location, stackKey, range) {\r\n return this.renderer.positionToPoint(this.getPositionX(dataItem, key, location, stackKey, range)).x;\r\n };\r\n /**\r\n * Returns the X coordinate for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey ?\r\n * @return Relative position\r\n */\r\n ValueAxis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\r\n var value = dataItem.getWorkingValue(key);\r\n if (!$type.hasValue(stackKey)) {\r\n stackKey = \"valueX\";\r\n }\r\n var stack = dataItem.getValue(stackKey, \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n if (this.logarithmic) {\r\n if (stack > 0) {\r\n value = 0;\r\n }\r\n }\r\n }\r\n var position = this.valueToPosition(value + stack);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns the Y coordinate for series' data item's value.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @return Y coordinate (px)\r\n */\r\n ValueAxis.prototype.getY = function (dataItem, key, location, stackKey, range) {\r\n return this.renderer.positionToPoint(this.getPositionY(dataItem, key, location, stackKey, range)).y;\r\n };\r\n /**\r\n * Returns relative position on axis for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @return Relative position\r\n */\r\n ValueAxis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\r\n var value = dataItem.getWorkingValue(key);\r\n if (!$type.hasValue(stackKey)) {\r\n stackKey = \"valueY\";\r\n }\r\n var stack = dataItem.getValue(stackKey, \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n if (this.logarithmic) {\r\n if (stack > 0) {\r\n value = 0;\r\n }\r\n }\r\n }\r\n var position = this.valueToPosition(value + stack);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns an angle for series data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @param range Range to fit in\r\n * @return Angle\r\n */\r\n ValueAxis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\r\n var value = dataItem.getWorkingValue(key);\r\n var stack = dataItem.getValue(stackKey, \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n }\r\n var position = this.valueToPosition(value + stack);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return this.positionToAngle(position);\r\n };\r\n /**\r\n * [getAnyRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param start [description]\r\n * @param end [description]\r\n * @param location [description]\r\n * @return [description]\r\n */\r\n ValueAxis.prototype.getAnyRangePath = function (start, end, location) {\r\n var startPosition = this.valueToPosition(start);\r\n var endPosition = this.valueToPosition(end);\r\n return this.getPositionRangePath(startPosition, endPosition); // Base class (Axis) gets range shape from AxisRenderer\r\n };\r\n /**\r\n * Returns text to show in a axis tooltip, based on specific position within\r\n * axis.\r\n *\r\n * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n * chart, or explicitly for this Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (px)\r\n * @return Label (numeric value)\r\n */\r\n ValueAxis.prototype.getTooltipText = function (position) {\r\n var value = $math.round(this.positionToValue(position), this._stepDecimalPlaces + this.extraTooltipPrecision);\r\n var valueStr = this.tooltip.numberFormatter.format(value);\r\n if (!this._adapterO) {\r\n return valueStr;\r\n }\r\n else {\r\n return this._adapterO.apply(\"getTooltipText\", valueStr);\r\n }\r\n };\r\n /**\r\n * Zooms axis to specific values.\r\n *\r\n * @param startValue Start value\r\n * @param endValue End value\r\n * @param skipRangeEvent Do not invoke events\r\n * @param instantly Do not play zoom animations\r\n */\r\n ValueAxis.prototype.zoomToValues = function (startValue, endValue, skipRangeEvent, instantly) {\r\n var start = (startValue - this.min) / (this.max - this.min);\r\n var end = (endValue - this.min) / (this.max - this.min);\r\n this.zoom({ start: start, end: end }, skipRangeEvent, instantly);\r\n };\r\n Object.defineProperty(ValueAxis.prototype, \"minZoomed\", {\r\n /**\r\n * A smallest value in axis scale within current zoom.\r\n *\r\n * @return Min zoom value\r\n */\r\n get: function () {\r\n if (!this.syncWithAxis) {\r\n return $math.max(this.min, this._minZoomed);\r\n }\r\n else {\r\n return this._minZoomed;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"maxZoomed\", {\r\n /**\r\n * A biggest value in axis scale within current zoom.\r\n * @return [description]\r\n */\r\n get: function () {\r\n if (!this.syncWithAxis) {\r\n return $math.min(this.max, this._maxZoomed);\r\n }\r\n else {\r\n return this._maxZoomed;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates positioning of Axis breaks after something changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ValueAxis.prototype.fixAxisBreaks = function () {\r\n var _this = this;\r\n _super.prototype.fixAxisBreaks.call(this);\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks && axisBreaks.length > 0) {\r\n // process breaks\r\n axisBreaks.each(function (axisBreak) {\r\n var startValue = axisBreak.adjustedStartValue;\r\n var endValue = axisBreak.adjustedEndValue;\r\n // break difference\r\n var axisBreakDif = endValue - startValue;\r\n var axisBreakGridCount = Math.ceil(axisBreakDif * axisBreak.breakSize) * _this._gridCount / (_this.max - _this.min);\r\n // calculate min, max and step for axis break\r\n var breakMinMaxStep = _this.adjustMinMax(startValue, endValue, axisBreakDif, axisBreakGridCount, true);\r\n axisBreak.adjustedStep = breakMinMaxStep.step;\r\n axisBreak.adjustedMin = breakMinMaxStep.min;\r\n axisBreak.adjustedMax = breakMinMaxStep.max;\r\n });\r\n }\r\n this._difference = this.adjustDifference(this.min, this.max);\r\n };\r\n /**\r\n * Returns value based on position.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\r\n ValueAxis.prototype.getPositionLabel = function (position) {\r\n var value = this.positionToValue(position);\r\n return this.numberFormatter.format(value);\r\n };\r\n /**\r\n * Shows Axis tooltip at specific value\r\n *\r\n * @param value Value\r\n */\r\n ValueAxis.prototype.showTooltipAt = function (value) {\r\n this.showTooltipAtPosition(this.valueToPosition(value));\r\n };\r\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\r\n ValueAxis.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.min = source.min;\r\n this.max = source.max;\r\n this.calculateTotals = source.calculateTotals;\r\n this._baseValue = source.baseValue;\r\n };\r\n Object.defineProperty(ValueAxis.prototype, \"syncWithAxis\", {\r\n /**\r\n * @return Target axis\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"syncWithAxis\");\r\n },\r\n /**\r\n * Enables syncing of grid with another axis.\r\n *\r\n * To enable, set to a reference of the other `ValueAxis`. This axis will try\r\n * to maintain its scale in such way that its grid matches target axis grid.\r\n *\r\n * IMPORTANT #1: At this stage it's an experimental feature. Use it at your\r\n * own risk, as it may not work in 100% of the scenarios.\r\n *\r\n * IMPORTANT #2: `syncWithAxis` is not compatible with `strictMinMax` and\r\n * `sequencedInterpolation` settings.\r\n *\r\n * IMPORTANT #3: `syncWithAxis` is not compatible with scrollbars. Make sure\r\n * you do not add a scrollbar in the same direction as synced axes. For\r\n * example, if you have vertical synced axes, do not add `scrollbarY` on\r\n * your chart. It will create anomalies when used.\r\n *\r\n * IMPORTANT #4: `syncWithAxis` is not compatible with `XYCursor` if it has\r\n * its `behavior` set to either `zoomY` or `zoomXY`.\r\n *\r\n * @since 4.8.1\r\n * @param axis Target axis\r\n */\r\n set: function (axis) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"syncWithAxis\", axis, true)) {\r\n if (axis) {\r\n this._disposers.push(axis.events.on(\"extremeschanged\", this.handleSelectionExtremesChange, this, false));\r\n this._disposers.push(axis.events.on(\"selectionextremeschanged\", this.handleSelectionExtremesChange, this, false));\r\n this._disposers.push(axis.events.on(\"startendchanged\", this.handleSelectionExtremesChange, this, false));\r\n this.events.on(\"shown\", this.handleSelectionExtremesChange, this, false);\r\n this.events.on(\"maxsizechanged\", function () {\r\n _this.clearCache();\r\n _this._disposers.push(registry.events.once(\"exitframe\", function () {\r\n _this.handleSelectionExtremesChange();\r\n }));\r\n }, this, false);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxis.prototype, \"treatZeroAs\", {\r\n /**\r\n * @return Zero replacement value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"treatZeroAs\");\r\n },\r\n /**\r\n * If set, zero values will be treated as this value.\r\n *\r\n * It is useful if you need to use data with zero-values on a logarithmic\r\n * axis scale.\r\n *\r\n * @since 4.9.34\r\n * @param value Zero replacement value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"treatZeroAs\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Syncs with a target axis.\r\n *\r\n * @param min Min\r\n * @param max Max\r\n * @param step Step\r\n */\r\n ValueAxis.prototype.syncAxes = function (min, max, step) {\r\n var axis = this.syncWithAxis;\r\n if (axis) {\r\n if (!$type.isNumber(min)) {\r\n min = this.min;\r\n }\r\n if (!$type.isNumber(max)) {\r\n max = this.max;\r\n }\r\n if (!$type.isNumber(step)) {\r\n step = this._step;\r\n }\r\n var count = Math.round((axis.maxZoomed - axis.minZoomed) / axis.step);\r\n var currentCount = Math.round((max - min) / step);\r\n if ($type.isNumber(count) && $type.isNumber(currentCount)) {\r\n var synced = false;\r\n var c = 0;\r\n var diff = (max - min) * 0.01;\r\n var omin = min;\r\n var omax = max;\r\n var ostep = step;\r\n while (synced != true) {\r\n synced = this.checkSync(omin, omax, ostep, count);\r\n c++;\r\n if (c > 1000) {\r\n synced = true;\r\n }\r\n if (!synced) {\r\n //omin = min - diff * c;\r\n if (c / 3 == Math.round(c / 3)) {\r\n omin = min - diff * c;\r\n if (min >= 0 && omin < 0) {\r\n omin = 0;\r\n }\r\n }\r\n else {\r\n omax = max + diff * c;\r\n if (omax <= 0 && omax > 0) {\r\n omax = 0;\r\n }\r\n }\r\n var minMaxStep = this.adjustMinMax(omin, omax, omax - omin, this._gridCount, true);\r\n omin = minMaxStep.min;\r\n omax = minMaxStep.max;\r\n ostep = minMaxStep.step;\r\n }\r\n else {\r\n min = omin;\r\n max = omax;\r\n step = ostep;\r\n }\r\n }\r\n }\r\n }\r\n return { min: min, max: max, step: step };\r\n };\r\n /**\r\n * Returns `true` if axis needs to be resunced with some other axis.\r\n */\r\n ValueAxis.prototype.checkSync = function (min, max, step, count) {\r\n var currentCount = (max - min) / step;\r\n for (var i = 1; i < count; i++) {\r\n if ($math.round(currentCount / i, 1) == count || currentCount * i == count) {\r\n return true;\r\n }\r\n }\r\n return false;\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 ValueAxis.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up axes\r\n if ($type.hasValue(config.syncWithAxis) && $type.isString(config.syncWithAxis)) {\r\n if (this.map.hasKey(config.syncWithAxis)) {\r\n config.syncWithAxis = this.map.getKey(config.syncWithAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[ValueAxis] No axis with id \\\"\" + config.syncWithAxis + \"\\\" found for `syncWithAxis`\");\r\n delete config.xAxis;\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return ValueAxis;\r\n}(Axis));\r\nexport { ValueAxis };\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[\"ValueAxis\"] = ValueAxis;\r\nregistry.registeredClasses[\"ValueAxisDataItem\"] = ValueAxisDataItem;\r\n//# sourceMappingURL=ValueAxis.js.map","/**\r\n * A module which defines functionality related to Value Axis Break.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Base class to define \"breaks\" on value axis.\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * when comparing columns with relatively similar values, it would make sense\r\n * to cut out their mid section, so that their tip differences are more\r\n * prominent.\r\n *\r\n * @see {@link IValueAxisBreakEvents} for a list of available events\r\n * @see {@link IValueAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar ValueAxisBreak = /** @class */ (function (_super) {\r\n __extends(ValueAxisBreak, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ValueAxisBreak() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ValueAxisBreak\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ValueAxisBreak.prototype, \"startPosition\", {\r\n /**\r\n * Pixel position of the break's start.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n if (this.axis) {\r\n return this.axis.valueToPosition(this.adjustedStartValue);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ValueAxisBreak.prototype, \"endPosition\", {\r\n /**\r\n * Pixel position of the break's end.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n if (this.axis) {\r\n return this.axis.valueToPosition(this.adjustedEndValue);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ValueAxisBreak;\r\n}(AxisBreak));\r\nexport { ValueAxisBreak };\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[\"ValueAxisBreak\"] = ValueAxisBreak;\r\n//# sourceMappingURL=ValueAxisBreak.js.map","/**\r\n * Axis Label module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Use to create labels on Axis.\r\n *\r\n * @see {@link IAxisLabelEvents} for a list of available events\r\n * @see {@link IAxisLabelAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar AxisLabel = /** @class */ (function (_super) {\r\n __extends(AxisLabel, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AxisLabel() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisLabel\";\r\n _this.isMeasured = false;\r\n _this.padding(10, 10, 10, 10);\r\n _this.location = 0.5;\r\n //this.nonScaling = true; // not good for perf\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisLabel.prototype, \"location\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"location\");\r\n },\r\n /**\r\n * Relative location of the label. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"location\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisLabel.prototype, \"inside\", {\r\n /**\r\n * Returns if label is set to be drawn inside axis.\r\n *\r\n * @return Inside?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"inside\");\r\n },\r\n /**\r\n * Sets if label should be drawn inside axis.\r\n *\r\n * @param value Inside?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"inside\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n AxisLabel.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n return changed;\r\n };\r\n return AxisLabel;\r\n}(Label));\r\nexport { AxisLabel };\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[\"AxisLabel\"] = AxisLabel;\r\n//# sourceMappingURL=AxisLabel.js.map","/**\r\n * HeatLegend module\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 { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { ValueAxis } from \"../../charts/axes/ValueAxis\";\r\nimport { AxisRendererX } from \"../../charts/axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../../charts/axes/AxisRendererY\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $colors from \"../../core/utils/Colors\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Sankey Diagram.\r\n *\r\n * @see {@link IHeatLegendEvents} for a list of available events\r\n * @see {@link IHeatLegendAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar HeatLegend = /** @class */ (function (_super) {\r\n __extends(HeatLegend, _super);\r\n /**\r\n * Constructor\r\n */\r\n function HeatLegend() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"HeatLegend\";\r\n _this.markerContainer = _this.createChild(Container);\r\n _this.markerContainer.shouldClone = false;\r\n _this.markerCount = 1;\r\n // Create a template container and list for the a marker\r\n var marker = new RoundedRectangle();\r\n marker.minHeight = 20;\r\n marker.minWidth = 20;\r\n marker.interactionsEnabled = false;\r\n marker.fillOpacity = 1;\r\n marker.cornerRadius(0, 0, 0, 0);\r\n _this.markerContainer.minHeight = 20;\r\n _this.markerContainer.minWidth = 20;\r\n _this.orientation = \"horizontal\";\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 _this.applyTheme();\r\n return _this;\r\n }\r\n HeatLegend.prototype.getMinFromRules = function (property) {\r\n var series = this.series;\r\n if (series) {\r\n var minValue_1;\r\n $iter.eachContinue(series.heatRules.iterator(), function (heatRule) {\r\n if (heatRule.property == property) {\r\n minValue_1 = heatRule.min;\r\n return false;\r\n }\r\n return true;\r\n });\r\n return minValue_1;\r\n }\r\n };\r\n HeatLegend.prototype.getMaxFromRules = function (property) {\r\n var series = this.series;\r\n if (series) {\r\n var maxValue_1;\r\n $iter.each(series.heatRules.iterator(), function (heatRule) {\r\n if (heatRule.property == property) {\r\n maxValue_1 = heatRule.max;\r\n return false;\r\n }\r\n return true;\r\n });\r\n return maxValue_1;\r\n }\r\n };\r\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n HeatLegend.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this.valueAxis.renderer.inversed = this.reverseOrder;\r\n var series = this.series;\r\n var minColor = this.minColor;\r\n var maxColor = this.maxColor;\r\n if (!$type.hasValue(minColor)) {\r\n minColor = toColor(this.getMinFromRules(\"fill\"));\r\n }\r\n if (!$type.hasValue(maxColor)) {\r\n maxColor = toColor(this.getMaxFromRules(\"fill\"));\r\n }\r\n if (series) {\r\n var seriesFill = series.fill;\r\n if (!$type.hasValue(minColor) && seriesFill instanceof Color) {\r\n minColor = seriesFill;\r\n }\r\n if (!$type.hasValue(maxColor) && seriesFill instanceof Color) {\r\n maxColor = seriesFill;\r\n }\r\n }\r\n if (!$type.hasValue(maxColor)) {\r\n maxColor = toColor(this.getMaxFromRules(\"fill\"));\r\n }\r\n var minOpacity = $type.toNumber(this.getMinFromRules(\"fillOpacity\"));\r\n if (!$type.isNumber(minOpacity)) {\r\n minOpacity = 1;\r\n }\r\n var maxOpacity = $type.toNumber(this.getMaxFromRules(\"fillOpacity\"));\r\n if (!$type.isNumber(maxOpacity)) {\r\n maxOpacity = 1;\r\n }\r\n var minStrokeOpacity = $type.toNumber(this.getMinFromRules(\"strokeOpacity\"));\r\n if (!$type.isNumber(minStrokeOpacity)) {\r\n minStrokeOpacity = 1;\r\n }\r\n var maxStrokeOpacity = $type.toNumber(this.getMaxFromRules(\"strokeOpacity\"));\r\n if (!$type.isNumber(maxStrokeOpacity)) {\r\n maxStrokeOpacity = 1;\r\n }\r\n var minStroke = toColor(this.getMinFromRules(\"stroke\"));\r\n var maxStroke = toColor(this.getMaxFromRules(\"stroke\"));\r\n //if (series) {\r\n for (var i = 0; i < this.markerCount; i++) {\r\n var marker = this.markers.getIndex(i);\r\n if (!marker) {\r\n marker = this.markers.create();\r\n marker.parent = this.markerContainer;\r\n marker.height = percent(100);\r\n marker.width = percent(100);\r\n }\r\n if (this.markerCount == 1) {\r\n var gradient = new LinearGradient();\r\n if (this.reverseOrder) {\r\n gradient.addColor(maxColor, maxOpacity);\r\n gradient.addColor(minColor, minOpacity);\r\n }\r\n else {\r\n gradient.addColor(minColor, minOpacity);\r\n gradient.addColor(maxColor, maxOpacity);\r\n }\r\n if (this.orientation == \"vertical\") {\r\n gradient.rotation = -90;\r\n }\r\n marker.fill = gradient;\r\n if ($type.hasValue(minStroke) && $type.hasValue(maxStroke)) {\r\n var strokeGradient = new LinearGradient();\r\n if (this.reverseOrder) {\r\n strokeGradient.addColor(maxStroke, maxStrokeOpacity);\r\n strokeGradient.addColor(minStroke, minStrokeOpacity);\r\n }\r\n else {\r\n strokeGradient.addColor(minStroke, minStrokeOpacity);\r\n strokeGradient.addColor(maxStroke, maxStrokeOpacity);\r\n }\r\n if (this.orientation == \"vertical\") {\r\n strokeGradient.rotation = -90;\r\n }\r\n marker.stroke = strokeGradient;\r\n }\r\n }\r\n else {\r\n var c = i;\r\n if (this.reverseOrder) {\r\n c = this.markerCount - i - 1;\r\n }\r\n var color = new Color($colors.interpolate(minColor.rgb, maxColor.rgb, c / this.markerCount));\r\n marker.fill = color;\r\n var opacity = minOpacity + (maxOpacity - minOpacity) * c / this.markerCount;\r\n marker.fillOpacity = opacity;\r\n if ($type.hasValue(minStroke) && $type.hasValue(maxStroke)) {\r\n var color_1 = new Color($colors.interpolate(minStroke.rgb, maxStroke.rgb, c / this.markerCount));\r\n marker.stroke = color_1;\r\n var opacity_1 = minStrokeOpacity + (maxStrokeOpacity - minStrokeOpacity) * c / this.markerCount;\r\n marker.strokeOpacity = opacity_1;\r\n }\r\n }\r\n }\r\n var renderer = this.valueAxis.renderer;\r\n if (this.markerCount > 1) {\r\n if (this.orientation == \"horizontal\") {\r\n renderer.minGridDistance = this.measuredWidth / this.markerCount;\r\n }\r\n else {\r\n renderer.minGridDistance = this.measuredHeight / this.markerCount;\r\n }\r\n }\r\n this.valueAxis.invalidate();\r\n for (var i = this.markerCount, len = this.markers.length; i < len; i++) {\r\n this.markers.getIndex(i).parent = undefined;\r\n }\r\n };\r\n Object.defineProperty(HeatLegend.prototype, \"minColor\", {\r\n /**\r\n * Returns minColor value\r\n * @return {Color}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minColor\");\r\n },\r\n /**\r\n * Min color of a heat legend. If a series is set for the legend, minColor is taken from series.\r\n *\r\n * @param {Color}\r\n */\r\n set: function (value) {\r\n if (!(value instanceof Color)) {\r\n value = toColor(value);\r\n }\r\n this.setColorProperty(\"minColor\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"maxColor\", {\r\n /**\r\n * Returns maxColor value\r\n * @return {Color}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxColor\");\r\n },\r\n /**\r\n * Max color of a heat legend. If a series is set for the legend, maxColor is taken from series.\r\n *\r\n * @param {Color}\r\n */\r\n set: function (value) {\r\n if (!(value instanceof Color)) {\r\n value = toColor(value);\r\n }\r\n this.setColorProperty(\"maxColor\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"markerCount\", {\r\n /**\r\n * Returns number of color squares (markers).\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"markerCount\");\r\n },\r\n /**\r\n * Number of color squares (markers) in the heat legend. If only 1 marker is used, it will be filled with gradient.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"markerCount\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"minValue\", {\r\n /**\r\n * Returns minimum value of heat legend.\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minValue\");\r\n },\r\n /**\r\n * Minimum value of heat legend's value axis. If a series is set for the legend, min is taken from series.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"minValue\", value);\r\n this.valueAxis.min = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"maxValue\", {\r\n /**\r\n * Returns maximum value of heat legend.\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxValue\");\r\n },\r\n /**\r\n * Maximum value of heat legend's value axis. If a series is set for the legend, max is taken from series.\r\n *\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxValue\", value);\r\n this.valueAxis.max = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"orientation\", {\r\n /**\r\n * Returns orientation value.\r\n *\r\n * @return {\"horizontal\" | \"vertical\"}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Heat legend orientation. Note, if you change orientation of a heat legend, you must set value axis renderer properties after that, as with orientation renderer changes.\r\n *\r\n * @param {\"horizontal\" | \"vertical\"}\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n var markerContainer = this.markerContainer;\r\n var valueAxis = this.valueAxis;\r\n // HORIZONTAL\r\n if (value == \"horizontal\") {\r\n if (!$type.hasValue(this.width)) {\r\n this.width = 200;\r\n }\r\n this.height = undefined;\r\n valueAxis.width = percent(100);\r\n valueAxis.height = undefined;\r\n valueAxis.tooltip.pointerOrientation = \"vertical\";\r\n this.layout = \"vertical\";\r\n markerContainer.width = percent(100);\r\n markerContainer.height = undefined;\r\n if (!(valueAxis.renderer instanceof AxisRendererX)) {\r\n valueAxis.renderer = new AxisRendererX();\r\n }\r\n }\r\n // VERTICAL\r\n else {\r\n if (!$type.hasValue(this.height)) {\r\n this.height = 200;\r\n }\r\n this.width = undefined;\r\n this.layout = \"horizontal\";\r\n markerContainer.width = undefined;\r\n markerContainer.height = percent(100);\r\n valueAxis.height = percent(100);\r\n valueAxis.width = undefined;\r\n valueAxis.tooltip.pointerOrientation = \"horizontal\";\r\n if (!(valueAxis.renderer instanceof AxisRendererY)) {\r\n valueAxis.renderer = new AxisRendererY();\r\n }\r\n valueAxis.renderer.inside = true;\r\n valueAxis.renderer.labels.template.inside = true;\r\n this.markerContainer.reverseOrder = true;\r\n }\r\n var renderer = valueAxis.renderer;\r\n renderer.grid.template.disabled = true;\r\n renderer.axisFills.template.disabled = true;\r\n renderer.baseGrid.disabled = true;\r\n renderer.labels.template.padding(2, 3, 2, 3);\r\n renderer.minHeight = undefined;\r\n renderer.minWidth = undefined;\r\n this.markerContainer.layout = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"valueAxis\", {\r\n /**\r\n * Returns valueAxis value.\r\n * @return {ValueAxis}\r\n */\r\n get: function () {\r\n if (!this._valueAxis) {\r\n this.valueAxis = this.createChild(ValueAxis);\r\n this.valueAxis.shouldClone = false;\r\n }\r\n return this._valueAxis;\r\n },\r\n /**\r\n * Sets a value axis of heat legend. Value axis for heat legend is created automatically.\r\n * @param {ValueAxis}\r\n */\r\n set: function (valueAxis) {\r\n this._valueAxis = valueAxis;\r\n valueAxis.parent = this;\r\n valueAxis.strictMinMax = true;\r\n this.orientation = this.orientation;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HeatLegend.prototype, \"series\", {\r\n /**\r\n * Returns series value.\r\n * @return {Series}\r\n */\r\n get: function () {\r\n return this._series;\r\n },\r\n /**\r\n * You can set series for heat legend. It will take min, max, minColor and maxColor values from this series.\r\n * @param series\r\n */\r\n set: function (series) {\r\n var _this = this;\r\n this._series = series;\r\n var dataField = \"value\";\r\n try {\r\n var dataFieldDefined = series.heatRules.getIndex(0).dataField;\r\n if (dataFieldDefined) {\r\n dataField = dataFieldDefined;\r\n }\r\n }\r\n catch (err) {\r\n }\r\n this.updateMinMax(series.dataItem.values[dataField].low, series.dataItem.values[dataField].high);\r\n series.dataItem.events.on(\"calculatedvaluechanged\", function (event) {\r\n _this.updateMinMax(series.dataItem.values[dataField].low, series.dataItem.values[dataField].high);\r\n }, undefined, false);\r\n series.heatRules.events.on(\"inserted\", this.invalidate, this, false);\r\n series.heatRules.events.on(\"removed\", this.invalidate, this, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates min/max of value axis.\r\n * @ignore\r\n */\r\n HeatLegend.prototype.updateMinMax = function (min, max) {\r\n var valueAxis = this.valueAxis;\r\n if (!$type.isNumber(this.minValue)) {\r\n valueAxis.min = min;\r\n valueAxis.invalidate();\r\n }\r\n if (!$type.isNumber(this.maxValue)) {\r\n valueAxis.max = max;\r\n valueAxis.invalidate();\r\n }\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n HeatLegend.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isString(config.series)) {\r\n if ($type.isString(config.series)) {\r\n if (this.map.hasKey(config.series)) {\r\n config.series = this.map.getKey(config.series);\r\n }\r\n else {\r\n var seriesId_1 = config.series;\r\n var disposer_1 = this.map.events.on(\"insertKey\", function (ev) {\r\n if (ev.key == seriesId_1) {\r\n this.series = ev.newValue;\r\n disposer_1.dispose();\r\n }\r\n }, this);\r\n this._disposers.push(disposer_1);\r\n delete config.series;\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return HeatLegend;\r\n}(Container));\r\nexport { HeatLegend };\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[\"HeatLegend\"] = HeatLegend;\r\n//# sourceMappingURL=HeatLegend.js.map","/**\r\n * Module, defining base Axis Renderer.\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 { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { AxisDataItem } from \"./Axis\";\r\nimport { AxisLine } from \"./AxisLine\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all axis renderers.\r\n *\r\n * @see {@link IAxisRendererEvents} for a list of available events\r\n * @see {@link IAxisRendererAdapters} for a list of available Adapters\r\n */\r\nvar AxisRenderer = /** @class */ (function (_super) {\r\n __extends(AxisRenderer, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRenderer() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A related chart.\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"AxisRenderer\";\r\n // Set defaults\r\n _this.minGridDistance = 50;\r\n _this.inside = false;\r\n _this.inversed = false;\r\n _this.tooltipLocation = 0.5;\r\n _this.fullWidthTooltip = false;\r\n _this.cellStartLocation = 0;\r\n _this.cellEndLocation = 1;\r\n _this.minLabelPosition = 0;\r\n _this.maxLabelPosition = 1;\r\n _this.shouldClone = false;\r\n var gridContainer = _this.createChild(Container);\r\n gridContainer.shouldClone = false;\r\n gridContainer.layout = \"none\";\r\n //\tgridContainer.isMeasured = false;\r\n gridContainer.virtualParent = _this;\r\n gridContainer.width = percent(100);\r\n gridContainer.height = percent(100);\r\n _this.gridContainer = gridContainer;\r\n // not good without this\r\n gridContainer.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n _this.invalidateAxisItems();\r\n }\r\n }, _this, false);\r\n var breakContainer = _this.createChild(Container);\r\n breakContainer.shouldClone = false;\r\n breakContainer.isMeasured = false;\r\n breakContainer.layout = \"none\";\r\n breakContainer.width = percent(100);\r\n breakContainer.height = percent(100);\r\n _this.breakContainer = breakContainer;\r\n var bulletsContainer = _this.createChild(Container);\r\n bulletsContainer.shouldClone = false;\r\n bulletsContainer.isMeasured = false;\r\n bulletsContainer.layout = \"none\";\r\n bulletsContainer.width = percent(100);\r\n bulletsContainer.height = percent(100);\r\n _this.bulletsContainer = bulletsContainer;\r\n _this.line = _this.createChild(AxisLine);\r\n _this.line.shouldClone = false;\r\n _this.line.strokeOpacity = 0;\r\n var baseGrid = _this.createChild(Grid);\r\n baseGrid.shouldClone = false;\r\n _this.baseGrid = baseGrid;\r\n // Make elements disposable\r\n var disposers = _this._disposers;\r\n disposers.push(baseGrid);\r\n disposers.push(_this.line);\r\n disposers.push(gridContainer);\r\n disposers.push(breakContainer);\r\n disposers.push(bulletsContainer);\r\n disposers.push(_this._chart);\r\n _this.ticks.template.disabled = true;\r\n _this.axisFills.template.disabled = true;\r\n _this.axisFills.template.interactionsEnabled = false;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisRenderer.prototype, \"axis\", {\r\n /**\r\n * Axis of a renderer\r\n * @return axis Axis\r\n */\r\n get: function () {\r\n return this._axis;\r\n },\r\n /**\r\n * Axis of a renderer\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n this.setAxis(axis);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n AxisRenderer.prototype.setAxis = function (axis) {\r\n this._axis = axis;\r\n this.baseGrid.parent = axis;\r\n this.line.parent = axis;\r\n this.gridContainer.bind(\"opacity\", axis);\r\n };\r\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRenderer.prototype.processRenderer = function () {\r\n this.events.on(\"sizechanged\", this.updateTooltip, this, false);\r\n this.events.on(\"positionchanged\", this.updateTooltip, this, false);\r\n this.labels.template.inside = this.inside;\r\n this.ticks.template.inside = this.inside;\r\n };\r\n /**\r\n * Updates Axis' tooltip.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRenderer.prototype.updateTooltip = function () {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"axisLength\", {\r\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n // This is a placeholder method for extending classes to override.\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Re-positions an element to new coordinates.\r\n *\r\n * @ignore Exclude from docs\r\n * @param item A target element\r\n * @param point New coordinates\r\n */\r\n AxisRenderer.prototype.positionItem = function (item, point) {\r\n if (item) {\r\n item.moveTo(point);\r\n }\r\n };\r\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Point\r\n */\r\n AxisRenderer.prototype.positionToPoint = function (position, position2) {\r\n // This is a placeholder method for extending classes to override.\r\n return { x: 0, y: 0 };\r\n };\r\n /**\r\n * Converts relative position on axis to angle.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review / units)\r\n * @param position Position (0-1)\r\n * @return Angle\r\n */\r\n AxisRenderer.prototype.positionToAngle = function (position) {\r\n // This is a placeholder method for extending classes to override.\r\n return 0;\r\n };\r\n /**\r\n * Converts relative position (0-1) on axis to a pixel coordinate.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\r\n AxisRenderer.prototype.positionToCoordinate = function (position) {\r\n var coordinate;\r\n var axis = this.axis;\r\n var axisFullLength = axis.axisFullLength;\r\n if (axis.renderer.inversed) {\r\n coordinate = (axis.end - position) * axisFullLength;\r\n }\r\n else {\r\n coordinate = (position - axis.start) * axisFullLength;\r\n }\r\n return coordinate;\r\n };\r\n AxisRenderer.prototype.updateGridContainer = function () {\r\n };\r\n AxisRenderer.prototype.getHeight = function () {\r\n var gridContainer = this.gridContainer;\r\n if (gridContainer.parent) {\r\n return gridContainer.parent.pixelHeight;\r\n }\r\n return this.gridContainer.pixelHeight || 0;\r\n };\r\n AxisRenderer.prototype.getWidth = function () {\r\n var gridContainer = this.gridContainer;\r\n if (gridContainer.parent) {\r\n return gridContainer.parent.pixelWidth;\r\n }\r\n return this.gridContainer.pixelWidth || 0;\r\n };\r\n /**\r\n * Converts a coordinate in pixels to a relative position. (0-1)\r\n *\r\n * @param coordinate Coordinate (px)\r\n * @param coordinate2 Coordinate of a second axis, only needed for complex axes systems, like timeline (px)\r\n * @return Position (0-1)\r\n */\r\n AxisRenderer.prototype.coordinateToPosition = function (coordinate, coordinate2) {\r\n var position;\r\n var axis = this.axis;\r\n var axisFullLength = axis.axisFullLength;\r\n if (axis.renderer.inversed) {\r\n position = axis.end - coordinate / axisFullLength;\r\n }\r\n else {\r\n position = coordinate / axisFullLength + axis.start;\r\n }\r\n return $math.round(position, 5);\r\n };\r\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\r\n AxisRenderer.prototype.pointToPosition = function (point) {\r\n // This is a placeholder method for extending classes to override.\r\n return 0;\r\n };\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\r\n AxisRenderer.prototype.getPositionRangePath = function (startPosition, endPosition) {\r\n return \"\";\r\n };\r\n /**\r\n * Invalidates all axis data items, effectively causing them re-evaluated.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\r\n AxisRenderer.prototype.invalidateAxisItems = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n axis.invalidateDataItems();\r\n }\r\n };\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRenderer.prototype.updateGridElement = function (grid, position, endPosition) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRenderer.prototype.updateTickElement = function (tick, position, endPosition) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions axis bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRenderer.prototype.updateBullet = function (bullet, position, endPosition) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRenderer.prototype.updateLabelElement = function (label, position, endPosition, location) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions the axis fill element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fill Fill element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRenderer.prototype.updateFillElement = function (fill, position, endPosition) {\r\n fill.startPosition = position;\r\n fill.endPosition = endPosition;\r\n };\r\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRenderer.prototype.updateAxisLine = function () {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRenderer.prototype.updateBaseGridElement = function () {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\r\n AxisRenderer.prototype.updateBreakElement = function (axisBreak) {\r\n this.positionItem(axisBreak.startLine, axisBreak.startPoint);\r\n this.toggleVisibility(axisBreak.startLine, axisBreak.startPosition, 0, 1);\r\n this.positionItem(axisBreak.endLine, axisBreak.endPoint);\r\n this.toggleVisibility(axisBreak.endLine, axisBreak.endPosition, 0, 1);\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"minGridDistance\", {\r\n /**\r\n * @return Min distance (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minGridDistance\");\r\n },\r\n /**\r\n * Minimum distance in pixels between grid elements.\r\n *\r\n * Use it to control density of the grid/labels on the axis.element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/#Setting_the_density_of_the_the_grid_labels} for more info\r\n * @param value Min distance (px)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"minGridDistance\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"chart\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * A chart, associated with the Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Chart\r\n */\r\n set: function (value) {\r\n this._chart.set(value, null);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Toggles visibility of an element, based on its current position and\r\n * min/max position settings.\r\n *\r\n * E.g. labels based on `minLabelPosition` and `maxLabelPosition`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite An element to toggle\r\n * @param position Elements current position\r\n * @param minPosition Min position setting\r\n * @param maxPosition Max position setting\r\n */\r\n AxisRenderer.prototype.toggleVisibility = function (sprite, position, minPosition, maxPosition) {\r\n var axis = this.axis;\r\n var dataItem = sprite.dataItem;\r\n if (dataItem && dataItem instanceof AxisDataItem) {\r\n if ($type.isNumber(dataItem.minPosition)) {\r\n minPosition = dataItem.minPosition;\r\n }\r\n if ($type.isNumber(dataItem.maxPosition)) {\r\n maxPosition = dataItem.maxPosition;\r\n }\r\n }\r\n var updatedStart = axis.start + (axis.end - axis.start) * (minPosition - 0.0001);\r\n var updatedEnd = axis.start + (axis.end - axis.start) * (maxPosition + 0.0001);\r\n if (!sprite.disabled) {\r\n if (position < updatedStart || position > updatedEnd) {\r\n sprite.__disabled = true;\r\n }\r\n else {\r\n sprite.__disabled = false;\r\n }\r\n }\r\n };\r\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\r\n AxisRenderer.prototype.createBreakSprites = function (axisBreak) {\r\n // This is a placeholder method for extending classes to override.\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"axisFills\", {\r\n /**\r\n * A list of Axis' Fill elements.\r\n *\r\n * Those are fill elements that cover the space between every second set\r\n * of grid lines, and can be configured to create striped charts.\r\n *\r\n * Please note that these are disabled by default. To enable them, set\r\n * template to true.\r\n *\r\n * ```TypeScript\r\n * categoryAxis.renderer.axisFills.template.disabled = false;\r\n * ```\r\n * ```JavaScript\r\n * categoryAxis.renderer.axisFills.template.disabled = false;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"renderer\": {\r\n * \"axisFills\": {\r\n * \"disabled\": false\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/alternated-axis-fills/} this tutorial for more info.\r\n * @return Fill elements\r\n */\r\n get: function () {\r\n if (!this._axisFills) {\r\n var fill = this.createFill(this.axis);\r\n this._axisFills = new ListTemplate(fill);\r\n fill.applyOnClones = true;\r\n fill.events.on(\"enabled\", this.invalidateAxisItems, this, false);\r\n this._disposers.push(new ListDisposer(this._axisFills));\r\n this._disposers.push(this._axisFills.template);\r\n }\r\n return this._axisFills;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new fill element, suitable for this Axis Renderer type.\r\n *\r\n * @return Fill element\r\n */\r\n AxisRenderer.prototype.createFill = function (axis) {\r\n return new AxisFill(axis);\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"grid\", {\r\n /**\r\n * A list of Axis' Grid elements.\r\n *\r\n * @return Grid elements\r\n */\r\n get: function () {\r\n if (!this._grid) {\r\n var grid = this.createGrid();\r\n this._grid = new ListTemplate(grid);\r\n grid.applyOnClones = true;\r\n grid.events.on(\"enabled\", this.invalidateAxisItems, this, false);\r\n this._disposers.push(new ListDisposer(this._grid));\r\n this._disposers.push(this._grid.template);\r\n }\r\n return this._grid;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new grid element, suitable for this Axis Renderer type.\r\n *\r\n * @return Grid element\r\n */\r\n AxisRenderer.prototype.createGrid = function () {\r\n return new Grid();\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"ticks\", {\r\n /**\r\n * A list of Axis' Tick elements.\r\n *\r\n * Please note that these are disabled by default. To enable ticks, you'll\r\n * need to set `disabled` and `strokeOpacity` properties of the tick template.\r\n *\r\n * ```TypeScript\r\n * categoryAxis.renderer.ticks.template.disabled = false;\r\n * categoryAxis.renderer.ticks.template.strokeOpacity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * categoryAxis.renderer.ticks.template.disabled = false;\r\n * categoryAxis.renderer.ticks.template.strokeOpacity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"renderer\": {\r\n * \"ticks\": {\r\n * \"disabled\": false,\r\n * \"strokeOpacity\": 0.5\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Tick elements\r\n */\r\n get: function () {\r\n if (!this._ticks) {\r\n var tick = this.createTick();\r\n tick.applyOnClones = true;\r\n tick.isMeasured = false;\r\n tick.events.on(\"enabled\", this.invalidateAxisItems, this, false);\r\n this._ticks = new ListTemplate(tick);\r\n this._disposers.push(new ListDisposer(this._ticks));\r\n this._disposers.push(this._ticks.template);\r\n }\r\n return this._ticks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new tick element, suitable for this Axis Renderer type.\r\n *\r\n * @return Tick element\r\n */\r\n AxisRenderer.prototype.createTick = function () {\r\n return new AxisTick();\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"labels\", {\r\n /**\r\n * A list of Axis' Label elements.\r\n *\r\n * @return Label elements\r\n */\r\n get: function () {\r\n if (!this._labels) {\r\n var label = this.createLabel();\r\n this._labels = new ListTemplate(label);\r\n label.applyOnClones = true;\r\n label.events.on(\"enabled\", this.invalidateAxisItems, this, false);\r\n this._disposers.push(new ListDisposer(this._labels));\r\n this._disposers.push(this._labels.template);\r\n }\r\n return this._labels;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new label element, suitable for this Axis Renderer type.\r\n *\r\n * @return Label element\r\n */\r\n AxisRenderer.prototype.createLabel = function () {\r\n return new AxisLabel();\r\n };\r\n Object.defineProperty(AxisRenderer.prototype, \"inside\", {\r\n /**\r\n * @return Labels inside?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"inside\");\r\n },\r\n /**\r\n * Indicates whether Axis' labels and ticks should be drawn inside Plot area.\r\n *\r\n * Does not work with all renderers, like AxisRendererRadial.\r\n *\r\n * @param value Labels inside?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"inside\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n }\r\n }\r\n if (value) {\r\n this.width = 0;\r\n this.height = 0;\r\n }\r\n else {\r\n this.width = undefined;\r\n this.height = undefined;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"opposite\", {\r\n /**\r\n * @return Draw axis on opposite side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"opposite\");\r\n },\r\n /**\r\n * Indicates whether Axis should be drawn on the opposite side of the plot\r\n * area than it would normally be drawn based on chart's settings.\r\n *\r\n * Does not work with all renderers, like [[AxisRendererRadial]] and\r\n * [[AxisRenderer Circular].\r\n *\r\n * @param value Draw axis on opposite side?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"opposite\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"fullWidthTooltip\", {\r\n /**\r\n * @return Full width tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"fullWidthTooltip\");\r\n },\r\n /**\r\n * Indicates if Axis tooltip should take the whole width of the axis cell.\r\n * (between two grid lines)\r\n *\r\n * NOTE: this setting is ignored on circular axis types.\r\n *\r\n * @param value Full width tooltip?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"fullWidthTooltip\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"tooltipLocation\", {\r\n /**\r\n * @return Tooltip location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tooltipLocation\");\r\n },\r\n /**\r\n * Location within axis cell to show tooltip on. (0-1)\r\n *\r\n * 0 - show at the start\r\n * 0.5 - show right in the middle\r\n * 1 - show at the end\r\n *\r\n * @param value Tooltip location\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tooltipLocation\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"tooltipLocation2\", {\r\n /**\r\n * @return Tooltip location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tooltipLocation2\");\r\n },\r\n /**\r\n * Location within secondary axis cell to show tooltip on. (0-1)\r\n *\r\n * 0 - show at the start\r\n * 0.5 - show right in the middle\r\n * 1 - show at the end\r\n *\r\n * @param value Tooltip location\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tooltipLocation2\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"cellStartLocation\", {\r\n /**\r\n * @return Cell start (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cellStartLocation\");\r\n },\r\n /**\r\n * Location for the cell start.\r\n *\r\n * Normally a \"cell\" is the whole available width in a category.\r\n *\r\n * If there are several clustered column-like series available, the whole\r\n * space is divided between each clustered column, or column stacks.\r\n *\r\n * `cellStartLocation` identifies where, within available space, the actual\r\n * cell starts.\r\n *\r\n * This, together with column series' `width` will affect actual width of\r\n * columns, and thus gaps between them.\r\n *\r\n * This will affect category-like axes only, like [[DateAxis]], or\r\n * [[CategoryAxis]].\r\n *\r\n * This is used to limit a space occupied by series like column.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Cell start (0-1)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"cellStartLocation\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"cellEndLocation\", {\r\n /**\r\n * @return Cell end (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cellEndLocation\");\r\n },\r\n /**\r\n * Location for the cell end.\r\n *\r\n * Normally a \"cell\" is the whole available width in a category.\r\n *\r\n * If there are several clustered column-like series available, the whole\r\n * space is divided between each clustered column, or column stacks.\r\n *\r\n * `cellEndLocation` identifies where, within available space, the actual\r\n * cell ends.\r\n *\r\n * This, together with column series' `width` will affect actual width of\r\n * columns, and thus gaps between them.\r\n *\r\n * This will affect category-like axes only, like [[DateAxis]], or\r\n * [[CategoryAxis]].\r\n *\r\n * This is used to limit a space occupied by series like column.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Cell end (0-1)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"cellEndLocation\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"inversed\", {\r\n /**\r\n * @return Flip axis?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"inversed\");\r\n },\r\n /**\r\n * Indicates if the scale of the axis should be flipped.\r\n *\r\n * @param value Flip axis?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"inversed\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"minLabelPosition\", {\r\n /**\r\n * @return Min label position (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minLabelPosition\");\r\n },\r\n /**\r\n * Minimum position along the Axis, for labels.\r\n *\r\n * Labels, which have their position closer to the start of the Axis, will be\r\n * automatically hidden.\r\n *\r\n * E.g., setting this to 0.05 (5% of total axis length) would hide labels,\r\n * that would otherwise be drawn very near start of the Axis.\r\n *\r\n * This is especially usefull with `inside = true`, or if the chart hasn't\r\n * got any extra margins.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Min label position (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"minLabelPosition\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRenderer.prototype, \"maxLabelPosition\", {\r\n /**\r\n * @return Max label position (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxLabelPosition\");\r\n },\r\n /**\r\n * Maximum position along the Axis, for labels.\r\n *\r\n * Labels, which have their position closer to the and of the Axis, will be\r\n * automatically hidden.\r\n *\r\n * E.g., setting this to 0.95 (95% of total axis length) would hide labels,\r\n * that would otherwise be drawn very near end of the Axis.\r\n *\r\n * This is especially usefull with `inside = true`, or if the chart hasn't\r\n * got any extra margins.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/positioning-axis-elements/} for more info.\r\n * @param value Max label position (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxLabelPosition\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all settings and related items from another object of the same\r\n * type.\r\n *\r\n * @param source Source object\r\n */\r\n AxisRenderer.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.grid.template.copyFrom(source.grid.template);\r\n this.ticks.template.copyFrom(source.ticks.template);\r\n this.labels.template.copyFrom(source.labels.template);\r\n this.axisFills.template.copyFrom(source.axisFills.template);\r\n this.line.copyFrom(source.line);\r\n this.baseGrid.copyFrom(source.baseGrid);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n AxisRenderer.prototype.toAxisPosition = function (value) {\r\n return value;\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 AxisRenderer.prototype.setVisibility = function (value) {\r\n _super.prototype.setVisibility.call(this, value);\r\n this.bulletsContainer.visible = value;\r\n };\r\n return AxisRenderer;\r\n}(Container));\r\nexport { AxisRenderer };\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[\"AxisRenderer\"] = AxisRenderer;\r\n//# sourceMappingURL=AxisRenderer.js.map","/**\r\n * Module, defining Axis Renderer for vertical axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { WavedLine } from \"../../core/elements/WavedLine\";\r\nimport { WavedRectangle } from \"../../core/elements/WavedRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A renderer for vertical axis.\r\n *\r\n * @see {@link IAxisRendererYEvents} for a list of available events\r\n * @see {@link IAxisRendererYAdapters} for a list of available Adapters\r\n */\r\nvar AxisRendererY = /** @class */ (function (_super) {\r\n __extends(AxisRendererY, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererY() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisRendererY\";\r\n _this.minGridDistance = 40;\r\n _this.opposite = false;\r\n _this.height = percent(100);\r\n _this.labels.template.verticalCenter = \"middle\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererY.prototype.setAxis = function (axis) {\r\n _super.prototype.setAxis.call(this, axis);\r\n axis.layout = \"horizontal\";\r\n };\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererY.prototype.updateGridContainer = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n var gridContainer = this.gridContainer;\r\n gridContainer.y = axis.pixelY;\r\n gridContainer.height = axis.axisLength;\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererY.prototype.toAxisPosition = function (value) {\r\n var axis = this.axis;\r\n if (axis) {\r\n var inversedPosition = 1 - value;\r\n var relativePositionSprite = axis.relativePositionSprite;\r\n var y = axis.pixelY;\r\n if (relativePositionSprite) {\r\n y = $utils.spritePointToSprite({ x: 0, y: this.pixelY }, this.parent, relativePositionSprite).y;\r\n }\r\n else {\r\n relativePositionSprite = axis.parent;\r\n }\r\n if (relativePositionSprite) {\r\n var relativeY = y / relativePositionSprite.innerHeight;\r\n var relativeHeight = axis.axisLength / relativePositionSprite.innerHeight;\r\n return 1 - (inversedPosition - relativeY) / relativeHeight;\r\n }\r\n }\r\n return value;\r\n };\r\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererY.prototype.processRenderer = function () {\r\n _super.prototype.processRenderer.call(this);\r\n var axis = this.axis;\r\n if (axis) {\r\n var title = axis.title;\r\n title.valign = \"middle\";\r\n if (!(axis.height instanceof Percent)) {\r\n axis.height = percent(100);\r\n }\r\n if (this.opposite) {\r\n title.rotation = 90;\r\n this.line.toBack();\r\n title.toFront();\r\n }\r\n else {\r\n title.rotation = -90;\r\n title.toBack();\r\n this.line.toFront();\r\n }\r\n }\r\n };\r\n /**\r\n * Updates some of the Axis tooltip's visual properties, related to\r\n * rendering of the Axis.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererY.prototype.updateTooltip = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n var bigNum = 2000;\r\n var bbx = 0;\r\n var bby = 0;\r\n var bbw = bigNum;\r\n var bbh = this.axisLength;\r\n // right\r\n if (this.opposite) {\r\n if (this.inside) {\r\n bbx = -bigNum;\r\n bbw = bigNum;\r\n }\r\n }\r\n // left\r\n else {\r\n if (!this.inside) {\r\n bbx = -bigNum;\r\n bbw = bigNum;\r\n }\r\n }\r\n this.axis.updateTooltip(\"horizontal\", { x: bbx, y: bby, width: bbw, height: bbh });\r\n }\r\n };\r\n Object.defineProperty(AxisRendererY.prototype, \"axisLength\", {\r\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n var axis = this.axis;\r\n return (axis.measuredHeight - axis.pixelPaddingTop - axis.pixelPaddingBottom) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\r\n AxisRendererY.prototype.positionToPoint = function (position, position2) {\r\n return { x: 0, y: this.positionToCoordinate(position) };\r\n };\r\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\r\n AxisRendererY.prototype.pointToPosition = function (point) {\r\n return this.coordinateToPosition(point.y, point.x);\r\n };\r\n /**\r\n * Converts a coordinate in pixels to a relative position. (0-1)\r\n *\r\n * @param coordinate Coordinate (px)\r\n * @param coordinate2 Coordinate of a second axis, only needed for complex axes systems, like timeline (px)\r\n * @return Position (0-1)\r\n */\r\n AxisRendererY.prototype.coordinateToPosition = function (coordinate, coordinate2) {\r\n var position;\r\n var axis = this.axis;\r\n var axisFullLength = axis.axisFullLength;\r\n if (axis.renderer.inversed) {\r\n position = (1 - axis.start) - coordinate / axisFullLength;\r\n }\r\n else {\r\n position = coordinate / axisFullLength + (1 - axis.end);\r\n }\r\n return $math.round(position, 5);\r\n };\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\r\n AxisRendererY.prototype.getPositionRangePath = function (startPosition, endPosition) {\r\n var y1 = $math.fitToRange(this.positionToCoordinate(startPosition), 0, this.axisLength);\r\n var y2 = $math.fitToRange(this.positionToCoordinate(endPosition), 0, this.axisLength);\r\n var h = Math.abs(y2 - y1);\r\n var w = this.getWidth();\r\n var y = Math.min(y1, y2);\r\n var x = 0;\r\n return $path.rectToPath({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n }, true);\r\n };\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererY.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n //\tpoint.y = $utils.spritePointToSprite({ x: 0, y: point.y }, this, this.gridContainer).y;\r\n grid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.getWidth(), y: 0 });\r\n this.positionItem(grid, point);\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererY.prototype.updateTickElement = function (tick, position, endPosition) {\r\n position = position + (endPosition - position) * tick.location;\r\n var point = this.positionToPoint(position);\r\n var tickLength = tick.length;\r\n try {\r\n $utils.used(this.axis.title.measuredWidth);\r\n }\r\n catch (_a) {\r\n // void\r\n }\r\n point.x = $utils.spritePointToSprite({ x: this.line.pixelX, y: 0 }, this.line.parent, this.gridContainer).x;\r\n if (!this.opposite) {\r\n tickLength *= (tick.inside ? 1 : -1);\r\n }\r\n else {\r\n tickLength *= (tick.inside ? -1 : 1);\r\n }\r\n tick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength, y: 0 });\r\n this.positionItem(tick, point);\r\n this.toggleVisibility(tick, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererY.prototype.updateAxisLine = function () {\r\n this.line.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.axisLength });\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererY.prototype.updateBaseGridElement = function () {\r\n _super.prototype.updateBaseGridElement.call(this);\r\n var axis = this.axis;\r\n var w = this.getWidth();\r\n var h = this.axisLength;\r\n var y = axis.basePoint.y;\r\n var baseGrid = this.baseGrid;\r\n if (y < -0.2 || y > h + 0.2) {\r\n baseGrid.hide(0);\r\n }\r\n else {\r\n var x = $utils.spritePointToSprite({ x: 0, y: 0 }, this.gridContainer, baseGrid.parent).x;\r\n baseGrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: w, y: 0 });\r\n baseGrid.moveTo({ x: x, y: y });\r\n baseGrid.show(0);\r\n }\r\n };\r\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRendererY.prototype.updateLabelElement = function (label, position, endPosition, location) {\r\n if (!$type.hasValue(location)) {\r\n location = label.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n label.isMeasured = !label.inside;\r\n var point = this.positionToPoint(position);\r\n var horizontalCenter;\r\n var deltaX = 0;\r\n var maxWidth = this.gridContainer.maxWidth;\r\n if (this.opposite) {\r\n if (label.inside) {\r\n horizontalCenter = \"right\";\r\n if (label.align == \"left\") {\r\n deltaX = -maxWidth;\r\n horizontalCenter = \"left\";\r\n }\r\n if (label.align == \"center\") {\r\n deltaX = -maxWidth / 2;\r\n horizontalCenter = \"middle\";\r\n }\r\n }\r\n else {\r\n horizontalCenter = \"left\";\r\n }\r\n point.x = 0 + deltaX;\r\n }\r\n else {\r\n if (label.inside) {\r\n horizontalCenter = \"left\";\r\n if (label.align == \"right\") {\r\n deltaX = maxWidth;\r\n horizontalCenter = \"right\";\r\n }\r\n if (label.align == \"center\") {\r\n deltaX = maxWidth / 2;\r\n horizontalCenter = \"middle\";\r\n }\r\n }\r\n else {\r\n horizontalCenter = \"right\";\r\n }\r\n point.x = this.measuredWidth + deltaX;\r\n }\r\n if (label.rotation == 0) {\r\n // Apply fuzzy logic to verticalCenter only if labels are not rotated\r\n label.horizontalCenter = horizontalCenter;\r\n }\r\n this.positionItem(label, point);\r\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n };\r\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\r\n AxisRendererY.prototype.updateBreakElement = function (axisBreak) {\r\n _super.prototype.updateBreakElement.call(this, axisBreak);\r\n var startLine = axisBreak.startLine;\r\n var endLine = axisBreak.endLine;\r\n var fillShape = axisBreak.fillShape;\r\n var startPoint = axisBreak.startPoint;\r\n var endPoint = axisBreak.endPoint;\r\n var x1 = axisBreak.pixelMarginLeft;\r\n var x2 = this.getWidth() - axisBreak.pixelMarginLeft - axisBreak.pixelMarginRight;\r\n startPoint.y = $math.fitToRange(startPoint.y, -1, this.axisLength + 1);\r\n endPoint.y = $math.fitToRange(endPoint.y, -1, this.axisLength + 1);\r\n if (startPoint.y == endPoint.y && (startPoint.y < 0 || startPoint.y > this.axisLength)) {\r\n axisBreak.fillShape.__disabled = true;\r\n }\r\n else {\r\n axisBreak.fillShape.__disabled = false;\r\n }\r\n var w = Math.abs(x2 - x1);\r\n startLine.x = x1;\r\n startLine.height = 0;\r\n startLine.width = w;\r\n endLine.x = x1;\r\n endLine.height = 0;\r\n endLine.width = w;\r\n fillShape.width = w;\r\n fillShape.height = Math.abs(endPoint.y - startPoint.y);\r\n fillShape.x = x1;\r\n fillShape.y = endPoint.y;\r\n };\r\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\r\n AxisRendererY.prototype.createBreakSprites = function (axisBreak) {\r\n axisBreak.startLine = new WavedLine();\r\n axisBreak.endLine = new WavedLine();\r\n var wavedRectangle = new WavedRectangle();\r\n wavedRectangle.setWavedSides(true, false, true, false);\r\n axisBreak.fillShape = wavedRectangle;\r\n };\r\n /**\r\n * Converts a position on the axis to a coordinate in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\r\n AxisRendererY.prototype.positionToCoordinate = function (position) {\r\n var coordinate;\r\n var axis = this.axis;\r\n var axisFullLength = axis.axisFullLength;\r\n if (!axis.renderer.inversed) {\r\n coordinate = (axis.end - position) * axisFullLength;\r\n }\r\n else {\r\n coordinate = (position - axis.start) * axisFullLength;\r\n }\r\n return coordinate;\r\n };\r\n /**\r\n * Updates and positions axis bullets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererY.prototype.updateBullet = function (bullet, position, endPosition) {\r\n var location = 0.5;\r\n if (bullet instanceof AxisBullet) {\r\n location = bullet.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n point.x = $utils.spritePointToSprite({ x: this.line.pixelX, y: 0 }, this.line.parent, this.gridContainer).x;\r\n this.positionItem(bullet, point);\r\n this.toggleVisibility(bullet, position, 0, 1);\r\n };\r\n return AxisRendererY;\r\n}(AxisRenderer));\r\nexport { AxisRendererY };\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[\"AxisRendererY\"] = AxisRendererY;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Put labels inside plot area.\r\n * Disable first and last labels.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.widthS,\r\n state: function (target, stateId) {\r\n if (target instanceof AxisRendererY) {\r\n var state = target.states.create(stateId);\r\n state.properties.inside = true;\r\n state.properties.maxLabelPosition = 0.9;\r\n state.properties.minLabelPosition = 0.1;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Disable labels altogather on very small charts\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.widthXS,\r\n state: function (target, stateId) {\r\n if (target instanceof AxisRendererY) {\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=AxisRendererY.js.map","/**\r\n * Module, defining Axis Renderer for vertical axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\nimport { WavedLine } from \"../../core/elements/WavedLine\";\r\nimport { WavedRectangle } from \"../../core/elements/WavedRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\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 * A renderer for horizontal axis.\r\n *\r\n * @see {@link IAxisRendererEvents} for a list of available events\r\n * @see {@link IAxisRendererAdapters} for a list of available Adapters\r\n */\r\nvar AxisRendererX = /** @class */ (function (_super) {\r\n __extends(AxisRendererX, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererX() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisRendererX\";\r\n _this.minGridDistance = 120;\r\n _this.opposite = false;\r\n _this.rotation = 0;\r\n _this.width = percent(100);\r\n _this.labels.template.horizontalCenter = \"middle\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererX.prototype.setAxis = function (axis) {\r\n _super.prototype.setAxis.call(this, axis);\r\n axis.layout = \"vertical\";\r\n };\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererX.prototype.updateGridContainer = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n var gridContainer = this.gridContainer;\r\n gridContainer.x = axis.pixelX;\r\n gridContainer.width = axis.axisLength;\r\n }\r\n };\r\n /**\r\n * Called when rendered is attached to an Axis, as well as a property of\r\n * Axis that might affect the appearance is updated.\r\n *\r\n * E.g. `axis.opposite`, `axis.inside`, etc.\r\n *\r\n * This method is called **before** draw, so that any related setting\r\n * changed in this method can be changed.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererX.prototype.processRenderer = function () {\r\n _super.prototype.processRenderer.call(this);\r\n // can not do this in init, as axis is set later\r\n var axis = this.axis;\r\n if (axis) {\r\n if (!(axis.width instanceof Percent)) {\r\n axis.width = percent(100);\r\n }\r\n // @todo Is thi sneeded?\r\n $utils.used(this.line);\r\n var title = axis.title;\r\n title.rotation = 0;\r\n title.align = \"center\";\r\n if (this.opposite) {\r\n this.line.toFront();\r\n title.toBack();\r\n }\r\n else {\r\n title.toFront();\r\n this.toBack();\r\n this.line.toBack();\r\n }\r\n }\r\n };\r\n /**\r\n * Updates some of the Axis tooltip's visual properties, related to\r\n * rendering of the Axis.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererX.prototype.updateTooltip = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n var bigNum = 1000;\r\n var bbx = this.line.pixelX;\r\n var bby = this.line.pixelY;\r\n var bbw = this.axisLength;\r\n var bbh = bigNum;\r\n // top\r\n if (this.opposite) {\r\n if (!this.inside) {\r\n bby = -bigNum;\r\n bbh = bigNum;\r\n }\r\n }\r\n // bottom\r\n else {\r\n if (this.inside) {\r\n bby = -bigNum;\r\n bbh = bigNum;\r\n }\r\n }\r\n this.axis.updateTooltip(\"vertical\", { x: bbx, y: bby, width: bbw, height: bbh });\r\n }\r\n };\r\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRendererX.prototype.updateLabelElement = function (label, position, endPosition, location) {\r\n if (!$type.hasValue(location)) {\r\n location = label.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n label.isMeasured = !label.inside;\r\n var deltaY = 0;\r\n var verticalCenter;\r\n var maxHeight = this.gridContainer.maxHeight;\r\n if (this.opposite) {\r\n if (label.inside) {\r\n verticalCenter = \"top\";\r\n if (label.valign == \"bottom\") {\r\n deltaY = maxHeight;\r\n verticalCenter = \"bottom\";\r\n }\r\n if (label.valign == \"middle\") {\r\n deltaY = maxHeight / 2;\r\n verticalCenter = \"middle\";\r\n }\r\n }\r\n else {\r\n verticalCenter = \"bottom\";\r\n }\r\n point.y = deltaY;\r\n }\r\n else {\r\n if (label.inside) {\r\n verticalCenter = \"bottom\";\r\n if (label.valign == \"top\") {\r\n deltaY = -maxHeight;\r\n verticalCenter = \"top\";\r\n }\r\n if (label.valign == \"middle\") {\r\n deltaY = -maxHeight / 2;\r\n verticalCenter = \"middle\";\r\n }\r\n }\r\n else {\r\n verticalCenter = \"top\";\r\n }\r\n point.y += deltaY;\r\n }\r\n if (label.rotation == 0) {\r\n // Apply fuzzy logic to verticalCenter only if labels are not rotated\r\n label.verticalCenter = verticalCenter;\r\n }\r\n this.positionItem(label, point);\r\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n };\r\n Object.defineProperty(AxisRendererX.prototype, \"axisLength\", {\r\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n var axis = this.axis;\r\n return (axis.measuredWidth - axis.pixelPaddingRight - axis.pixelPaddingLeft) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\r\n AxisRendererX.prototype.positionToPoint = function (position, position2) {\r\n return { x: this.positionToCoordinate(position), y: 0 };\r\n };\r\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\r\n AxisRendererX.prototype.pointToPosition = function (point) {\r\n return this.coordinateToPosition(point.x, point.y);\r\n };\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\r\n AxisRendererX.prototype.getPositionRangePath = function (startPosition, endPosition) {\r\n var x1 = $math.fitToRange(this.positionToCoordinate(startPosition), 0, this.axisLength);\r\n var x2 = $math.fitToRange(this.positionToCoordinate(endPosition), 0, this.axisLength);\r\n var w = Math.abs(x2 - x1);\r\n var h = this.getHeight();\r\n var x = Math.min(x1, x2);\r\n var y = 0;\r\n return $path.rectToPath({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n }, true);\r\n };\r\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\r\n AxisRendererX.prototype.updateBreakElement = function (axisBreak) {\r\n _super.prototype.updateBreakElement.call(this, axisBreak);\r\n var startLine = axisBreak.startLine;\r\n var endLine = axisBreak.endLine;\r\n var fillShape = axisBreak.fillShape;\r\n var startPoint = axisBreak.startPoint;\r\n var endPoint = axisBreak.endPoint;\r\n var y1 = axisBreak.pixelMarginLeft;\r\n var y2 = this.getHeight() - axisBreak.pixelMarginTop - axisBreak.pixelMarginBottom;\r\n startPoint.x = $math.fitToRange(startPoint.x, -1, this.axisLength + 1);\r\n endPoint.x = $math.fitToRange(endPoint.x, -1, this.axisLength + 1);\r\n if (startPoint.x == endPoint.x && (startPoint.x < 0 || startPoint.x > this.axisLength)) {\r\n axisBreak.fillShape.__disabled = true;\r\n }\r\n else {\r\n axisBreak.fillShape.__disabled = false;\r\n }\r\n startLine.y = y1;\r\n startLine.width = 0;\r\n startLine.height = y2;\r\n endLine.y = y1;\r\n endLine.width = 0;\r\n endLine.height = y2;\r\n fillShape.height = y2;\r\n fillShape.width = Math.abs(endPoint.x - startPoint.x);\r\n fillShape.y = y1;\r\n fillShape.x = startPoint.x;\r\n };\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererX.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n //point.x = $utils.spritePointToSprite({x:point.x, y:0}, this, this.gridContainer).x;\r\n grid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.getHeight() });\r\n this.positionItem(grid, point);\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererX.prototype.updateTickElement = function (tick, position, endPosition) {\r\n position = position + (endPosition - position) * tick.location;\r\n var point = this.positionToPoint(position);\r\n var tickLength = tick.length;\r\n point.y = $utils.spritePointToSprite({ x: 0, y: this.line.pixelY }, this.line.parent, this.gridContainer).y;\r\n if (this.opposite) {\r\n tickLength *= (tick.inside ? 1 : -1);\r\n }\r\n else {\r\n tickLength *= (tick.inside ? -1 : 1);\r\n }\r\n tick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: tickLength });\r\n this.positionItem(tick, point);\r\n this.toggleVisibility(tick, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererX.prototype.updateAxisLine = function () {\r\n this.line.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.axisLength, y: 0 });\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererX.prototype.updateBaseGridElement = function () {\r\n _super.prototype.updateBaseGridElement.call(this);\r\n var axis = this.axis;\r\n var h = this.getHeight();\r\n var w = this.axisLength;\r\n var baseGrid = this.baseGrid;\r\n var x = axis.basePoint.x;\r\n if (x < -0.2 || x > w + 0.2) {\r\n baseGrid.hide(0);\r\n }\r\n else {\r\n var y = $utils.spritePointToSprite({ x: 0, y: 0 }, this.gridContainer, baseGrid.parent).y;\r\n baseGrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: h });\r\n baseGrid.moveTo({ x: x, y: y });\r\n baseGrid.show(0);\r\n }\r\n };\r\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\r\n AxisRendererX.prototype.createBreakSprites = function (axisBreak) {\r\n axisBreak.startLine = new WavedLine();\r\n axisBreak.endLine = new WavedLine();\r\n var wavedRectangle = new WavedRectangle();\r\n wavedRectangle.setWavedSides(false, true, false, true);\r\n axisBreak.fillShape = wavedRectangle;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererX.prototype.toAxisPosition = function (value) {\r\n var inversedPosition = value;\r\n var axis = this.axis;\r\n if (axis) {\r\n var relativePositionSprite = axis.relativePositionSprite;\r\n var x = axis.pixelX;\r\n if (relativePositionSprite) {\r\n x = $utils.spritePointToSprite({ x: this.pixelX, y: 0 }, this.parent, relativePositionSprite).x;\r\n }\r\n else {\r\n relativePositionSprite = axis.parent;\r\n }\r\n if (relativePositionSprite) {\r\n var relativeX = x / relativePositionSprite.innerWidth;\r\n var relativeWidth = axis.axisLength / relativePositionSprite.innerWidth;\r\n return (inversedPosition - relativeX) / relativeWidth;\r\n }\r\n }\r\n return value;\r\n };\r\n /**\r\n * Updates and positions axis bullets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererX.prototype.updateBullet = function (bullet, position, endPosition) {\r\n var location = 0.5;\r\n if (bullet instanceof AxisBullet) {\r\n location = bullet.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n point.y = $utils.spritePointToSprite({ x: 0, y: this.line.pixelY }, this.line.parent, this.gridContainer).y;\r\n this.positionItem(bullet, point);\r\n this.toggleVisibility(bullet, position, 0, 1);\r\n };\r\n return AxisRendererX;\r\n}(AxisRenderer));\r\nexport { AxisRendererX };\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[\"AxisRendererX\"] = AxisRendererX;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Put labels inside plot area.\r\n * Disable first and last labels.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXS,\r\n state: function (target, stateId) {\r\n if (target instanceof AxisRendererX) {\r\n var state = target.states.create(stateId);\r\n state.properties.inside = true;\r\n state.properties.maxLabelPosition = 0.9;\r\n state.properties.minLabelPosition = 0.1;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Disable labels altogather on very small charts\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.heightXXS,\r\n state: function (target, stateId) {\r\n if (target instanceof AxisRendererX) {\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=AxisRendererX.js.map","/**\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw Axis line.\r\n *\r\n * @see {@link IAxisLineEvents} for a list of available events\r\n * @see {@link IAxisLineAdapters} for a list of available Adapters\r\n */\r\nvar AxisLine = /** @class */ (function (_super) {\r\n __extends(AxisLine, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AxisLine() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisLine\";\r\n _this.element = _this.paper.add(\"path\");\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.stroke = interfaceColors.getFor(\"grid\");\r\n _this.strokeOpacity = 0.15;\r\n _this.pixelPerfect = true;\r\n _this.fill = color();\r\n _this.applyTheme();\r\n _this.interactionsEnabled = false;\r\n return _this;\r\n //this.element.moveTo({ x: 0, y: 0 });\r\n }\r\n return AxisLine;\r\n}(Sprite));\r\nexport { AxisLine };\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[\"AxisLine\"] = AxisLine;\r\n//# sourceMappingURL=AxisLine.js.map","/**\r\n * A module defining functionality for axis grid elements.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\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 * Displays an axis grid line.\r\n *\r\n * @see {@link IGridEvents} for a list of available events\r\n * @see {@link IGridAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the grid, also with 3d charts we might need some additional elements\r\n * @important\r\n */\r\nvar Grid = /** @class */ (function (_super) {\r\n __extends(Grid, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Grid() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Grid\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.location = 0.5;\r\n _this.isMeasured = false;\r\n _this.above = false;\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.stroke = interfaceColors.getFor(\"grid\");\r\n _this.pixelPerfect = true;\r\n _this.strokeOpacity = 0.15;\r\n _this.fill = color(); // \"none\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Grid.prototype, \"location\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"location\");\r\n },\r\n /**\r\n * Location within axis cell to place grid line on.\r\n *\r\n * * 0 - start\r\n * * 0.5 - middle\r\n * * 1 - end\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"location\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Grid.prototype, \"above\", {\r\n /**\r\n * @return Draw above series?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"above\");\r\n },\r\n /**\r\n * Normally fill goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"above\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n Grid.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n return changed;\r\n };\r\n return Grid;\r\n}(Sprite));\r\nexport { Grid };\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[\"Grid\"] = Grid;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Disable grid on smaller charts\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Grid) {\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=Grid.js.map","import { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * AxisFill is a base class used to defines fill shapes for various\r\n * type-specific Axes.\r\n *\r\n * Axis fills are used to add fills to specific ranges of those axes.\r\n *\r\n * @see {@link IAxisFillEvents} for a list of available events\r\n * @see {@link IAxisFillAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar AxisFill = /** @class */ (function (_super) {\r\n __extends(AxisFill, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Axis\r\n */\r\n function AxisFill(axis) {\r\n var _this = _super.call(this) || this;\r\n _this.axis = axis;\r\n _this.element = _this.paper.add(\"path\");\r\n _this.className = \"AxisFill\";\r\n _this.isMeasured = false;\r\n _this.location = 0;\r\n _this.above = false;\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n _this.fillOpacity = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n AxisFill.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n return changed;\r\n };\r\n /**\r\n * Draws the fill element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisFill.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (this.__disabled || this.disabled) {\r\n return;\r\n }\r\n if (this.axis && $type.isNumber(this.startPosition) && $type.isNumber(this.endPosition)) {\r\n this.fillPath = this.axis.getPositionRangePath(this.startPosition, this.endPosition);\r\n this.path = this.fillPath;\r\n if (this.isMeasured) {\r\n this.measure();\r\n }\r\n }\r\n };\r\n Object.defineProperty(AxisFill.prototype, \"startPosition\", {\r\n /**\r\n * @return Start position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startPosition\");\r\n },\r\n /**\r\n * An actual starting position of the fill.\r\n *\r\n * @param value Starting position\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startPosition\", value);\r\n this.invalidate(); // this is needed as relative position might not change when zooming\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisFill.prototype, \"endPosition\", {\r\n /**\r\n * @return End position\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endPosition\");\r\n },\r\n /**\r\n * An actual end position of the fill.\r\n *\r\n * @param value End position\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endPosition\", value);\r\n this.invalidate(); // this is needed as relative position might not change when zooming\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisFill.prototype, \"location\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"location\");\r\n },\r\n /**\r\n * Relative location of the fill. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"location\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n AxisFill.prototype.setPath = function (value) {\r\n if (this.setPropertyValue(\"path\", value)) {\r\n this.element.attr({ \"d\": value });\r\n return true;\r\n }\r\n return false;\r\n };\r\n Object.defineProperty(AxisFill.prototype, \"above\", {\r\n /**\r\n * @return Draw above series?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"above\");\r\n },\r\n /**\r\n * Normally fill goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"above\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AxisFill;\r\n}(Sprite));\r\nexport { AxisFill };\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[\"AxisFill\"] = AxisFill;\r\n//# sourceMappingURL=AxisFill.js.map","/**\r\n * Axis break module\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 { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { WavedLine } from \"../../core/elements/WavedLine\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Base class to define \"breaks\" on axes.\r\n *\r\n * @see {@link IAxisBreakEvents} for a list of available events\r\n * @see {@link IAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar AxisBreak = /** @class */ (function (_super) {\r\n __extends(AxisBreak, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AxisBreak() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Reference to parent Axis.\r\n */\r\n _this._axis = new MutableValueDisposer();\r\n /**\r\n * A list of axis data items which fall within this break.\r\n */\r\n _this.dataItems = new List();\r\n _this.className = \"AxisBreak\";\r\n // Set defaults\r\n _this.breakSize = 0.01;\r\n _this.marginLeft = -5;\r\n _this.marginRight = -5;\r\n _this.marginTop = -5;\r\n _this.marginBottom = -5;\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create elements\r\n // (these won't be used actually, just for setting properties)\r\n var fillShape = new WavedLine();\r\n fillShape.fill = interfaceColors.getFor(\"background\");\r\n fillShape.stroke = color();\r\n fillShape.fillOpacity = 0.9;\r\n fillShape.zIndex = 0;\r\n _this._fillShape = fillShape;\r\n var startLine = new WavedLine();\r\n startLine.fill = color();\r\n startLine.stroke = interfaceColors.getFor(\"grid\");\r\n startLine.strokeOpacity = 0.3;\r\n startLine.zIndex = 1;\r\n _this._startLine = startLine;\r\n var endLine = new WavedLine();\r\n endLine.fill = color();\r\n endLine.stroke = color(\"#000000\"); // interfaceColors.getFor(\"grid\");\r\n endLine.strokeOpacity = 0.3;\r\n endLine.zIndex = 2;\r\n _this._endLine = endLine;\r\n _this._disposers.push(_this._axis);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n AxisBreak.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n if (this._fillShape) {\r\n this._fillShape.dispose();\r\n }\r\n if (this._startLine) {\r\n this._startLine.dispose();\r\n }\r\n if (this._endLine) {\r\n this._endLine.dispose();\r\n }\r\n };\r\n Object.defineProperty(AxisBreak.prototype, \"startLine\", {\r\n /**\r\n * @return Element\r\n */\r\n get: function () {\r\n return this._startLine;\r\n },\r\n /**\r\n * An element used for the starting line of the break.\r\n *\r\n * @param sprite Element\r\n */\r\n set: function (sprite) {\r\n if (this._startLine) {\r\n this._startLine.dispose();\r\n }\r\n this._startLine = sprite;\r\n this.addBreakSprite(sprite);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"endLine\", {\r\n /**\r\n * @return Element\r\n */\r\n get: function () {\r\n return this._endLine;\r\n },\r\n /**\r\n * An element used for the end line of the break.\r\n *\r\n * @param sprite Element\r\n */\r\n set: function (sprite) {\r\n if (this._endLine) {\r\n this._endLine.dispose();\r\n }\r\n this._endLine = sprite;\r\n this.addBreakSprite(sprite);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"fillShape\", {\r\n /**\r\n * @return Element\r\n */\r\n get: function () {\r\n return this._fillShape;\r\n },\r\n /**\r\n * An element used for fill of the break.\r\n *\r\n * @param sprite Element\r\n */\r\n set: function (sprite) {\r\n if (this._fillShape) {\r\n this._fillShape.dispose();\r\n }\r\n this._fillShape = sprite;\r\n this.addBreakSprite(sprite);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds a break element (e.g. lines, fill) to the break, which is\r\n * [[Container]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite Element to add\r\n */\r\n AxisBreak.prototype.addBreakSprite = function (sprite) {\r\n sprite.parent = this;\r\n sprite.isMeasured = false;\r\n this._disposers.push(sprite);\r\n };\r\n Object.defineProperty(AxisBreak.prototype, \"axis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n return this._axis.get();\r\n },\r\n /**\r\n * An Axis this Break is associated with.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n if (this._axis.get() !== axis) {\r\n this._axis.set(axis, axis.renderer.gridContainer.events.on(\"transformed\", this.invalidate, this, false));\r\n axis.renderer.createBreakSprites(this);\r\n // this can't go to copyFrom, as axis is set later\r\n var breakTemplate = axis.axisBreaks.template;\r\n this.startLine.copyFrom(breakTemplate.startLine);\r\n this.endLine.copyFrom(breakTemplate.endLine);\r\n this.fillShape.copyFrom(breakTemplate.fillShape);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"breakSize\", {\r\n /**\r\n * @return Relative axis break\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"breakSize\");\r\n },\r\n /**\r\n * A size of the break relative to the actual size of the scope break spans.\r\n *\r\n * For example, if `breakSize = 0.1` and unbroken scope of values it spans\r\n * would be 100 pixels, the break would be 10 pixels wide.\r\n *\r\n * 0 means the break will completely collapse and hide the values.\r\n * 1 means break would be not collapse at all, which would make it\r\n * effectively useless.\r\n *\r\n * @default 0.01\r\n * @param value Relative axis break\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"breakSize\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"startPoint\", {\r\n /**\r\n * Returns pixel coordinates of axis break's start.\r\n *\r\n * @return Start point\r\n */\r\n get: function () {\r\n var renderer = this.axis.renderer;\r\n if (renderer) {\r\n return renderer.positionToPoint(this.startPosition);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"endPoint\", {\r\n /**\r\n * Returns pixel coordinates of axis break's end.\r\n *\r\n * @return End point\r\n */\r\n get: function () {\r\n var renderer = this.axis.renderer;\r\n if (renderer) {\r\n return renderer.positionToPoint(this.endPosition);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"startPosition\", {\r\n /**\r\n * Returns a relative position at which axis break starts.\r\n *\r\n * This is a calculated position, meaning it shows relative position of the\r\n * break after break is applied.\r\n *\r\n * @return Start position\r\n */\r\n get: function () {\r\n return;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"endPosition\", {\r\n /**\r\n * Returns a relative position at which axis break ends.\r\n *\r\n * This is a calculated position, meaning it shows relative position of the\r\n * break after break is applied.\r\n *\r\n * @return End position\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 * Draws the axis break.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisBreak.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (this.axis) {\r\n var renderer = this.axis.renderer;\r\n renderer.updateBreakElement(this);\r\n }\r\n };\r\n Object.defineProperty(AxisBreak.prototype, \"startValue\", {\r\n /**\r\n * @return Starting value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startValue\");\r\n },\r\n /**\r\n * A starting value for the break.\r\n *\r\n * @param value Starting value\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startValue\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisBreak.prototype, \"endValue\", {\r\n /**\r\n * @return End value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endValue\");\r\n },\r\n /**\r\n * An end value for the break.\r\n *\r\n * @param value End value\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endValue\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AxisBreak;\r\n}(Container));\r\nexport { AxisBreak };\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[\"AxisBreak\"] = AxisBreak;\r\n//# sourceMappingURL=AxisBreak.js.map","/**\r\n * Tick module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A basic Tick class.\r\n *\r\n * A tick is a short dash, mainly connecting an object like axis or slice to\r\n * it's textual label.\r\n *\r\n * @see {@link ITickEvents} for a list of available events\r\n * @see {@link ITickAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar Tick = /** @class */ (function (_super) {\r\n __extends(Tick, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Tick() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Tick\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.fillOpacity = 0;\r\n _this.length = 6;\r\n _this.strokeOpacity = 0.2;\r\n _this.stroke = interfaceColors.getFor(\"grid\");\r\n _this.isMeasured = false;\r\n _this.nonScalingStroke = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(Tick.prototype, \"length\", {\r\n /**\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n if (this.disabled) {\r\n return 0;\r\n }\r\n return this.getPropertyValue(\"length\");\r\n },\r\n /**\r\n * Length of the tick in pixels.\r\n *\r\n * @param value Length (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"length\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Tick;\r\n}(Sprite));\r\nexport { Tick };\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[\"Tick\"] = Tick;\r\n//# sourceMappingURL=Tick.js.map","/**\r\n * Axis Bullet module.\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\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Used to draw a positioned bullet (element) on an Axis.\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * let flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * var flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"bullet: {\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.5.9\r\n * @see {@link IAxisBulletEvents} for a list of available events\r\n * @see {@link IAxisBulletAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar AxisBullet = /** @class */ (function (_super) {\r\n __extends(AxisBullet, _super);\r\n function AxisBullet() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisBullet\";\r\n _this.location = 0.5;\r\n _this.isMeasured = false;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisBullet.prototype, \"location\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"location\");\r\n },\r\n /**\r\n * Relative position within cell/range.\r\n *\r\n * Value range is from from `0` (beginning) to `1` (end).\r\n *\r\n * NOTE: `location` is relative to the parent axis range's scope, i.e.\r\n * between its `date` and `endDate` for [[DateAxis]], or `value`/`endValue`\r\n * ([[ValueAxis]]), or `category`/`endCategory` ([[categoryAxis]]).\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n * range.endDate = new Date(2018, 0, 6);\r\n *\r\n * let bullet = new am4charts.AxisBullet();\r\n * bullet.location = 1;\r\n *\r\n * let flag = bullet.createChild(am4plugins_bullets.FlagBullet);\r\n * flag.label.text = \"Hello\";\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n * range.endDate = new Date(2018, 0, 6);\r\n *\r\n * var bullet = new am4charts.AxisBullet();\r\n * bullet.location = 1;\r\n *\r\n * var flag = bullet.createChild(am4plugins_bullets.FlagBullet);\r\n * flag.label.text = \"Hello\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"endDate\": new Date(2018, 0, 6),\r\n * \"bullet: {\r\n * \"type\": \"AxisBullet\",\r\n * \"location\": 1,\r\n * \"children\": [{\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }]\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 0.5\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"location\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n AxisBullet.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n return changed;\r\n };\r\n return AxisBullet;\r\n}(Container));\r\nexport { AxisBullet };\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[\"AxisBullet\"] = AxisBullet;\r\n//# sourceMappingURL=AxisBullet.js.map","/**\r\n * Base class for all Axis\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 { Container } from \"../../core/Container\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { List, ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $array from \"../../core/utils/Array\";\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 [[Axis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar AxisDataItem = /** @class */ (function (_super) {\r\n __extends(AxisDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AxisDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisDataItem.prototype, \"grid\", {\r\n /**\r\n * @return Grid element\r\n */\r\n get: function () {\r\n if (!this._grid) {\r\n var component_1 = this.component;\r\n if (component_1) {\r\n var template = void 0;\r\n var grid_1;\r\n if (this.isRange) {\r\n template = component_1.axisRanges.template.grid;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n grid_1 = template.clone();\r\n }\r\n }\r\n else {\r\n template = component_1.renderer.grid.template;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n grid_1 = component_1.renderer.grid.create();\r\n this._disposers.push(new Disposer(function () {\r\n component_1.renderer.grid.removeValue(grid_1);\r\n }));\r\n }\r\n }\r\n this.grid = grid_1;\r\n grid_1.shouldClone = false;\r\n this._disposers.push(grid_1);\r\n grid_1.axis = this.component;\r\n }\r\n }\r\n return this._grid;\r\n },\r\n /**\r\n * A [[Grid]] element associated with this data item.\r\n *\r\n * If there is no grid element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param grid Grid element\r\n */\r\n set: function (grid) {\r\n if (this._grid && this._grid != grid) {\r\n $array.remove(this.sprites, this._grid);\r\n this._grid.dataItem = undefined;\r\n }\r\n if (grid) {\r\n if (grid.dataItem && grid.dataItem != this) {\r\n $array.remove(grid.dataItem.sprites, grid);\r\n grid.dataItem.grid = undefined;\r\n }\r\n this.addSprite(grid);\r\n }\r\n this._grid = grid;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"tick\", {\r\n /**\r\n * @return Tick element\r\n */\r\n get: function () {\r\n if (!this._tick) {\r\n var component_2 = this.component;\r\n if (component_2) {\r\n var template = void 0;\r\n var tick_1;\r\n if (this.isRange) {\r\n template = component_2.axisRanges.template.tick;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n tick_1 = template.clone();\r\n }\r\n }\r\n else {\r\n template = component_2.renderer.ticks.template;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n tick_1 = component_2.renderer.ticks.create();\r\n this._disposers.push(new Disposer(function () {\r\n component_2.renderer.ticks.removeValue(tick_1);\r\n }));\r\n }\r\n }\r\n this.tick = tick_1;\r\n tick_1.axis = this.component;\r\n tick_1.shouldClone = false;\r\n this._disposers.push(tick_1);\r\n }\r\n }\r\n return this._tick;\r\n },\r\n /**\r\n * An [[AxisTick]] element associated with this data item.\r\n *\r\n * If there is no tick element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param tick Tick element\r\n */\r\n set: function (tick) {\r\n if (this._tick && this._tick != tick) {\r\n $array.remove(this.sprites, this._tick);\r\n this._tick.dataItem = undefined;\r\n }\r\n if (tick) {\r\n if (tick.dataItem && tick.dataItem != this) {\r\n $array.remove(tick.dataItem.sprites, tick);\r\n tick.dataItem.tick = undefined;\r\n }\r\n this.addSprite(tick);\r\n }\r\n this._tick = tick;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"label\", {\r\n /**\r\n * @return Label element\r\n */\r\n get: function () {\r\n if (!this._label) {\r\n var component_3 = this.component;\r\n if (component_3) {\r\n var template = void 0;\r\n var label_1;\r\n if (this.isRange) {\r\n template = component_3.axisRanges.template.label;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n label_1 = template.clone();\r\n }\r\n }\r\n else {\r\n template = component_3.renderer.labels.template;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n label_1 = component_3.renderer.labels.create();\r\n this._disposers.push(new Disposer(function () {\r\n component_3.renderer.labels.removeValue(label_1);\r\n }));\r\n }\r\n }\r\n this._disposers.push(label_1);\r\n this.label = label_1;\r\n label_1.shouldClone = false;\r\n label_1.axis = this.component;\r\n label_1.virtualParent = component_3;\r\n }\r\n }\r\n return this._label;\r\n },\r\n /**\r\n * An [[AxisLabel]] element associated with this data item.\r\n *\r\n * If there is no label element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param label Label element\r\n */\r\n set: function (label) {\r\n if (this._label && this._label != label) {\r\n $array.remove(this.sprites, this._label);\r\n this._label.dataItem = undefined;\r\n }\r\n if (label) {\r\n if (label.dataItem && label.dataItem != this) {\r\n $array.remove(label.dataItem.sprites, label);\r\n label.dataItem.label = undefined;\r\n }\r\n this.addSprite(label);\r\n }\r\n this._label = label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"axisFill\", {\r\n /**\r\n * @return Label element\r\n */\r\n get: function () {\r\n if (!this._axisFill) {\r\n var component_4 = this.component;\r\n if (component_4) {\r\n var template = void 0;\r\n var axisFill_1;\r\n if (this.isRange) {\r\n template = component_4.axisRanges.template.axisFill;\r\n if (!this.isTemplate && template.disabled) {\r\n return;\r\n }\r\n else {\r\n axisFill_1 = template.clone();\r\n }\r\n }\r\n else {\r\n template = component_4.renderer.axisFills.template;\r\n if (template.disabled) {\r\n return;\r\n }\r\n else {\r\n axisFill_1 = component_4.renderer.axisFills.create();\r\n this._disposers.push(new Disposer(function () {\r\n component_4.renderer.axisFills.removeValue(axisFill_1);\r\n }));\r\n }\r\n }\r\n this.axisFill = axisFill_1;\r\n axisFill_1.shouldClone = false;\r\n this._disposers.push(axisFill_1);\r\n }\r\n }\r\n return this._axisFill;\r\n },\r\n /**\r\n * An [[AxisFill]] associated element with this data item.\r\n *\r\n * If there is no fill element associated with data item, a new one is\r\n * created and returned.\r\n *\r\n * @param label Label element\r\n */\r\n set: function (axisFill) {\r\n if (this._axisFill && this._axisFill != axisFill) {\r\n $array.remove(this.sprites, this._axisFill);\r\n this._axisFill.dataItem = undefined;\r\n }\r\n if (axisFill) {\r\n if (axisFill.dataItem && axisFill.dataItem != this) {\r\n $array.remove(axisFill.dataItem.sprites, axisFill);\r\n axisFill.dataItem.axisFill = undefined;\r\n }\r\n axisFill.axis = this.component;\r\n this.addSprite(axisFill);\r\n }\r\n this._axisFill = axisFill;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"text\", {\r\n /**\r\n * @return Text label\r\n */\r\n get: function () {\r\n return this._text;\r\n },\r\n /**\r\n * Text to be used as data item's label.\r\n *\r\n * @param text Text label\r\n */\r\n set: function (text) {\r\n this._text = text;\r\n if (this._label) { // do not use getter, it will create unwanted instances!\r\n this._label.text = text;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"mask\", {\r\n /**\r\n * Data item's mask.\r\n *\r\n * @return Mask\r\n */\r\n get: function () {\r\n return this._mask;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"contents\", {\r\n /**\r\n * Returns a [[Container]] to place all visual elements, related to data item\r\n * in.\r\n *\r\n * If there is no Container, a new one is created.\r\n *\r\n * @return Contents container\r\n */\r\n get: function () {\r\n if (!this._contents) {\r\n var contents = new Container();\r\n this.addSprite(contents);\r\n contents.isMeasured = false;\r\n this._contents = contents;\r\n var component = this.component;\r\n if (component) {\r\n var mask = component.renderer.createFill(this.component);\r\n mask.disabled = false;\r\n mask.axis = component;\r\n this.addSprite(mask);\r\n this._mask = mask;\r\n contents.mask = mask;\r\n }\r\n }\r\n return this._contents;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisDataItem.prototype, \"axisBreak\", {\r\n /**\r\n * @return Axis break\r\n */\r\n get: function () {\r\n return this._axisBreak;\r\n },\r\n /**\r\n * An [[AxisBreak]] this data item falls within.\r\n *\r\n * @param axisBreak Axis break\r\n */\r\n set: function (axisBreak) {\r\n if (this._axisBreak) {\r\n this._axisBreak.dataItems.removeValue(this);\r\n }\r\n if (axisBreak) {\r\n axisBreak.dataItems.push(this);\r\n }\r\n this._axisBreak = axisBreak;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Re-draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisDataItem.prototype.validate = function () {\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n };\r\n /**\r\n * Appends data item's elements to the parent [[Container]].\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisDataItem.prototype.appendChildren = function () {\r\n if (this.component) {\r\n this.component.appendDataItem(this);\r\n }\r\n };\r\n /**\r\n * Checks if data item has particular property set.\r\n *\r\n * @param prop Property name\r\n * @return Property set?\r\n */\r\n AxisDataItem.prototype.hasProperty = function (prop) {\r\n return prop == \"component\" ? true : _super.prototype.hasProperty.call(this, prop);\r\n };\r\n /**\r\n * Copies all parameters from another [[AxisDataItem]].\r\n *\r\n * @param source Source AxisDataItem\r\n */\r\n AxisDataItem.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.text = source.text;\r\n if (source.bullet) {\r\n this.bullet = source.bullet.clone();\r\n }\r\n this.minPosition = source.minPosition;\r\n this.maxPosition = source.maxPosition;\r\n };\r\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Data Item\r\n */\r\n AxisDataItem.prototype.setVisibility = function (value, noChangeValues) {\r\n _super.prototype.setVisibility.call(this, value, noChangeValues);\r\n if (this._contents) {\r\n this._contents.visible = value;\r\n }\r\n };\r\n Object.defineProperty(AxisDataItem.prototype, \"bullet\", {\r\n /**\r\n * @return Bullet\r\n */\r\n get: function () {\r\n return this._bullet;\r\n },\r\n /**\r\n * Set it to an instance of any [[Sprite]]. It will be displayed as an axis\r\n * bullet in the middle of the cell, or specific value.\r\n *\r\n * If you need position bullet relatively to the cell, use [[AxisBullet]]\r\n * instead. It has a `location` property which can be used to indicate\r\n * precise relative location within cell/range.\r\n *\r\n * Also, [[AxisBullet]] is a [[Container]] so you can push any other element\r\n * into it.\r\n *\r\n * NOTE: `location` is relative to the parent axis range's scope, i.e.\r\n * between its `date` and `endDate` for [[DateAxis]], or `value`/`endValue`\r\n * ([[ValueAxis]]), or `category`/`endCategory` ([[categoryAxis]]).\r\n *\r\n * ```TypeScript\r\n * let range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * let flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JavaScript\r\n * var range = dateAxis.axisRanges.create();\r\n * range.date = new Date(2018, 0, 5);\r\n *\r\n * var flag = new am4plugins_bullets.FlagBullet();\r\n * flag.label.text = \"Hello\";\r\n *\r\n * range.bullet = flag;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * // ...\r\n * \"axisRanges\": [{\r\n * \"date\": new Date(2018, 0, 5),\r\n * \"bullet: {\r\n * \"type\": \"FlagBullet\",\r\n * \"label\": {\r\n * \"text\": \"Hello\"\r\n * }\r\n * }\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.5.9\r\n * @param value Bullet\r\n */\r\n set: function (value) {\r\n if (this._bullet && this._bullet != value) {\r\n $array.remove(this.sprites, this._bullet);\r\n this._bullet.dataItem = undefined;\r\n }\r\n this._bullet = value;\r\n if (value) {\r\n this.addSprite(value);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AxisDataItem;\r\n}(DataItem));\r\nexport { AxisDataItem };\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines named positions for data item's location within [[Axis]].\r\n */\r\nexport var AxisItemLocation;\r\n(function (AxisItemLocation) {\r\n AxisItemLocation[AxisItemLocation[\"Start\"] = 0] = \"Start\";\r\n AxisItemLocation[AxisItemLocation[\"Middle\"] = 0.5] = \"Middle\";\r\n AxisItemLocation[AxisItemLocation[\"End\"] = 1] = \"End\";\r\n})(AxisItemLocation || (AxisItemLocation = {}));\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A base class for all Axis elements.\r\n *\r\n * @see {@link IAxisEvents} for a list of available Events\r\n * @see {@link IAxisAdapters} for a list of available Adapters\r\n */\r\nvar Axis = /** @class */ (function (_super) {\r\n __extends(Axis, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Axis() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Number of Grid elements on the axis.\r\n */\r\n _this._gridCount = 10;\r\n /**\r\n * A list of [[XYSeries]] that are using this Axis.\r\n */\r\n _this._series = new List();\r\n /**\r\n * Specifies if axis should be automatically disposed when removing from\r\n * chart's axis list.\r\n *\r\n * @default true\r\n */\r\n _this.autoDispose = true;\r\n /**\r\n * @ignore\r\n */\r\n _this._axisItemCount = 0;\r\n if (_this.constructor === Axis) {\r\n throw new Error(\"'Axis' cannot be instantiated directly. Please use a specific axis type.\");\r\n }\r\n _this.hideTooltipWhileZooming = true;\r\n _this.minWidth = 0.0001;\r\n _this.minHeight = 0.0001;\r\n _this.className = \"Axis\";\r\n _this.shouldClone = false;\r\n _this.setPropertyValue(\"cursorTooltipEnabled\", true);\r\n _this.toggleZoomOutButton = true;\r\n _this.zoomable = true;\r\n var interfaceColors = new InterfaceColorSet();\r\n // Create title\r\n _this.title = new Label();\r\n _this.title.shouldClone = false;\r\n _this._disposers.push(_this.title);\r\n _this.setPropertyValue(\"startLocation\", 0);\r\n _this.setPropertyValue(\"endLocation\", 1);\r\n // Data item iterator\r\n _this._dataItemsIterator = new $iter.ListIterator(_this.dataItems, function () { return _this.dataItems.create(); });\r\n _this._dataItemsIterator.createNewItems = true;\r\n // Create tooltip\r\n var tooltip = new Tooltip();\r\n _this._disposers.push(tooltip);\r\n tooltip.label.padding(5, 10, 5, 10);\r\n tooltip.background.pointerLength = 5;\r\n tooltip.fitPointerToBounds = true;\r\n tooltip.background.filters.clear();\r\n // Set virtual parentfor the tooltip so that it can properly inheirt\r\n // formatters from the axis.\r\n tooltip.virtualParent = _this;\r\n // Create background element for the tooltip\r\n var background = tooltip.background;\r\n background.cornerRadius = 0;\r\n background.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n background.stroke = background.fill;\r\n background.strokeWidth = 1;\r\n background.fillOpacity = 1;\r\n tooltip.label.fill = interfaceColors.getFor(\"alternativeText\");\r\n _this.tooltip = tooltip;\r\n // Accessibility\r\n _this.readerHidden = true;\r\n _this.events.on(\"rangechangestarted\", function () {\r\n _this.series.each(function (series) {\r\n if (series.hideTooltipWhileZooming) {\r\n series.tooltip.hide();\r\n series.tooltip.preventShow = true;\r\n }\r\n });\r\n if (_this.hideTooltipWhileZooming) {\r\n _this.tooltip.hide();\r\n _this.tooltip.preventShow = true;\r\n }\r\n }, undefined, false);\r\n _this.events.on(\"rangechangeended\", function () {\r\n _this.series.each(function (series) {\r\n if (series.hideTooltipWhileZooming) {\r\n series.tooltip.hide();\r\n series.tooltip.preventShow = false;\r\n }\r\n });\r\n if (_this.hideTooltipWhileZooming) {\r\n _this.tooltip.hide();\r\n _this.tooltip.preventShow = false;\r\n }\r\n }, undefined, false);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Holds reference to a function that accepts a DataItem and its index as\r\n * parameters.\r\n *\r\n * It can either return a fill opacity for a fill, or manipulate data item\r\n * directly, to create various highlighting scenarios.\r\n *\r\n * For example, you can set it up to highlight only weekends on a\r\n * [[DateAxis]].\r\n */\r\n Axis.prototype.fillRule = function (dataItem, index) {\r\n if (!$type.isNumber(index)) {\r\n index = dataItem.index;\r\n }\r\n if (index / 2 == Math.round(index / 2)) {\r\n dataItem.axisFill.__disabled = true;\r\n dataItem.axisFill.opacity = 0;\r\n }\r\n else {\r\n dataItem.axisFill.opacity = 1;\r\n dataItem.axisFill.__disabled = false;\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 Axis.prototype.createDataItem = function () {\r\n return new AxisDataItem();\r\n };\r\n /**\r\n * Invalidates layout.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.invalidateLayout = function () {\r\n _super.prototype.invalidateLayout.call(this);\r\n // this puts series after axis in invalidation order also makes series update it's data items in case widht/height of a series is not 100%\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.invalidateLayout();\r\n });\r\n };\r\n /**\r\n * Invalidates series of this axis.\r\n */\r\n Axis.prototype.invalidateSeries = function () {\r\n // this puts series after axis in invalidation order also makes series update it's data items in case widht/height of a series is not 100%\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.invalidate();\r\n });\r\n };\r\n /**\r\n * Override to cancel super call for data element validation.\r\n * @ignore\r\n */\r\n Axis.prototype.validateDataElements = function () {\r\n this._axisItemCount = 0;\r\n if (this.ghostLabel) {\r\n this.renderer.updateLabelElement(this.ghostLabel, this.start, this.end);\r\n this.ghostLabel.validate();\r\n }\r\n };\r\n /**\r\n * Recalculates the number of grid items on the axis.\r\n */\r\n Axis.prototype.updateGridCount = function () {\r\n if (this.renderer) {\r\n var gridCount = this.axisLength / this.renderer.minGridDistance;\r\n if (gridCount != this._gridCount) {\r\n this._gridCount = gridCount;\r\n this.clearCache();\r\n }\r\n }\r\n };\r\n /**\r\n * Redraws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.validateLayout = function () {\r\n this.axisFullLength = this.axisLength / (this.end - this.start);\r\n _super.prototype.validateLayout.call(this);\r\n this.updateGridCount();\r\n var renderer = this.renderer;\r\n if (renderer) {\r\n renderer.updateAxisLine();\r\n renderer.updateTooltip();\r\n renderer.updateBaseGridElement();\r\n }\r\n if (this._prevLength != this.axisLength) {\r\n this.dispatchImmediately(\"lengthchanged\");\r\n this._prevLength = this.axisLength;\r\n }\r\n };\r\n /**\r\n * Initializes Axis' renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.initRenderer = function () {\r\n };\r\n /**\r\n * Adds a data item to the Axis.\r\n *\r\n * @param dataItem Data item\r\n */\r\n Axis.prototype.appendDataItem = function (dataItem) {\r\n var renderer = this.renderer;\r\n var tick = dataItem.tick;\r\n if (tick) {\r\n if (tick.above) {\r\n tick.parent = renderer.bulletsContainer;\r\n }\r\n else {\r\n tick.parent = renderer.gridContainer;\r\n }\r\n }\r\n if (dataItem.label) {\r\n dataItem.label.parent = renderer;\r\n }\r\n var axisFill = dataItem.axisFill;\r\n if (axisFill) {\r\n if (axisFill.above) {\r\n axisFill.parent = renderer.bulletsContainer;\r\n }\r\n else {\r\n axisFill.parent = renderer.gridContainer;\r\n }\r\n }\r\n var grid = dataItem.grid;\r\n if (grid) {\r\n if (grid.above) {\r\n grid.parent = renderer.bulletsContainer;\r\n }\r\n else {\r\n grid.parent = renderer.gridContainer;\r\n }\r\n }\r\n if (dataItem.bullet) {\r\n dataItem.bullet.parent = renderer.bulletsContainer;\r\n }\r\n };\r\n /**\r\n * Redraws Axis' related items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this.validateLayout();\r\n this.renderer.updateGridContainer();\r\n };\r\n /**\r\n * Redars Axis ranges.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.validateAxisRanges = function () {\r\n var _this = this;\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n _this.appendDataItem(axisRange);\r\n _this.validateDataElement(axisRange);\r\n if (axisRange.grid) {\r\n axisRange.grid.validate();\r\n }\r\n if (axisRange.tick) {\r\n axisRange.tick.validate();\r\n }\r\n if (axisRange.axisFill) {\r\n axisRange.axisFill.validate();\r\n }\r\n if (axisRange.label) {\r\n axisRange.label.validate();\r\n }\r\n });\r\n };\r\n /**\r\n * Invalidates all axis breaks, so they are redrawn.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.validateBreaks = function () {\r\n if (this._axisBreaks) {\r\n $iter.each(this._axisBreaks.iterator(), function (axisBreak) {\r\n axisBreak.invalidate();\r\n });\r\n }\r\n };\r\n /**\r\n * Associates an Axis break with this Axis, after it is inserted into\r\n * `axisBreaks`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n Axis.prototype.processBreak = function (event) {\r\n var axisBreak = event.newValue;\r\n axisBreak.parent = this.renderer.breakContainer;\r\n axisBreak.axis = this;\r\n };\r\n /**\r\n * Registers a [[XYSeries]] element with this Axis.\r\n *\r\n * Returns a [[Disposer]] for all events, added to Series for watching\r\n * changes in Axis, and vice versa.\r\n * @ignore\r\n * @param series Series\r\n * @return Event disposer\r\n */\r\n Axis.prototype.registerSeries = function (series) {\r\n var _this = this;\r\n this.series.moveValue(series);\r\n return new MultiDisposer([\r\n new Disposer(function () {\r\n _this.series.removeValue(series);\r\n }),\r\n this.events.on(\"lengthchanged\", series.invalidate, series, false),\r\n this.events.on(\"lengthchanged\", series.createMask, series, false),\r\n this.events.on(\"startchanged\", series.invalidate, series, false),\r\n this.events.on(\"endchanged\", series.invalidate, series, false),\r\n ]);\r\n };\r\n Object.defineProperty(Axis.prototype, \"renderer\", {\r\n /**\r\n * @return Renderer\r\n */\r\n get: function () {\r\n return this._renderer;\r\n },\r\n /**\r\n * An [[AxisRenderer]] to be used to render this Axis.\r\n *\r\n * Please note that most of the settings, related to Axis' appearance are set\r\n * via its renderer. Not directly on the Axis.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * axis.renderer.inside = true;\r\n * axis.renderer.minLabelPosition = 0.1;\r\n * axis.renderer.maxLabelPosition = 0.9;\r\n * ```\r\n * ```JavaScript\r\n * axis.renderer.inside = true;\r\n * axis.renderer.minLabelPosition = 0.1;\r\n * axis.renderer.maxLabelPosition = 0.9;\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/} for more info\r\n * @param renderer Renderer\r\n */\r\n set: function (renderer) {\r\n if (renderer != this._renderer) {\r\n this._renderer = renderer;\r\n renderer.chart = this.chart;\r\n renderer.axis = this;\r\n renderer.parent = this;\r\n this.title.parent = this; // we add title to axis and set layout in renderer to avoid one extra container, as otherwise axis container would be used for holding renderer only\r\n this.initRenderer();\r\n this._disposers.push(renderer.gridContainer.events.on(\"maxsizechanged\", this.invalidate, this, false));\r\n var ghostLabel_1 = this.renderer.labels.create();\r\n this._disposers.push(ghostLabel_1);\r\n ghostLabel_1.dataItem = this.dataItems.template.clone(); // just for the adapters not to fail\r\n ghostLabel_1.text = \"L\";\r\n ghostLabel_1.parent = this.renderer;\r\n ghostLabel_1.shouldClone = false;\r\n ghostLabel_1.fillOpacity = 0;\r\n ghostLabel_1.opacity = 0;\r\n ghostLabel_1.strokeOpacity = 0;\r\n ghostLabel_1.interactionsEnabled = false;\r\n ghostLabel_1.validate();\r\n this.ghostLabel = ghostLabel_1;\r\n this.events.on(\"beforedatavalidated\", function () {\r\n ghostLabel_1.text = \"L\";\r\n }, undefined, false);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts a relative position to angle. (for circular axes)\r\n *\r\n * @param position Position (0-1)\r\n * @return Angle\r\n */\r\n Axis.prototype.positionToAngle = function (position) {\r\n return this.renderer.positionToAngle(position);\r\n };\r\n /**\r\n * Converts pixel coordinates to a relative position. (0-1)\r\n *\r\n * @param point Coorinates (px)\r\n * @return Position (0-1)\r\n */\r\n Axis.prototype.pointToPosition = function (point) {\r\n return this.renderer.pointToPosition(point);\r\n };\r\n /**\r\n * Converts relative position to coordinate.\r\n *\r\n * @since 4.7.15\r\n * @param position (0-1)\r\n * @return coordinate (px)\r\n */\r\n Axis.prototype.positionToCoordinate = function (position) {\r\n return this.renderer.positionToCoordinate(position);\r\n };\r\n /**\r\n * [getAnyRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param start [description]\r\n * @param end [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getAnyRangePath = function (start, end) {\r\n return this.renderer.getPositionRangePath(start, end);\r\n };\r\n /**\r\n * Converts any positional parameter to a relative position on axis.\r\n *\r\n * @todo Description (review)\r\n * @param value Pisition\r\n * @return Position (0-1)\r\n */\r\n Axis.prototype.anyToPosition = function (value) {\r\n return 0;\r\n };\r\n /**\r\n * Converts any positional parameter to a relative position on axis.\r\n *\r\n * @todo Description (review)\r\n * @param value Pisition\r\n * @return Orientation point\r\n */\r\n Axis.prototype.anyToPoint = function (value) {\r\n return { x: 0, y: 0, angle: 0 };\r\n };\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition [description]\r\n * @param endPosition [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getPositionRangePath = function (startPosition, endPosition) {\r\n if (this.renderer) {\r\n return this.renderer.getPositionRangePath(startPosition, endPosition);\r\n }\r\n return \"\";\r\n };\r\n Object.defineProperty(Axis.prototype, \"axisLength\", {\r\n /**\r\n * Actual axis length in pixels.\r\n *\r\n * @return Axis length (px)\r\n */\r\n get: function () {\r\n if (this.renderer) {\r\n return this.renderer.axisLength;\r\n }\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"cursorTooltipEnabled\", {\r\n /**\r\n * @return Display tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cursorTooltipEnabled\");\r\n },\r\n /**\r\n * Indicates if axis should display a tooltip for chart's cursor.\r\n *\r\n * @param value Display tooltip?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"cursorTooltipEnabled\", value)) {\r\n if (value && this.renderer) {\r\n this.renderer.updateTooltip();\r\n }\r\n else if (this.tooltip) {\r\n this.tooltip.hide(0);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"toggleZoomOutButton\", {\r\n /**\r\n * @return Toggle zoom out button?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"toggleZoomOutButton\");\r\n },\r\n /**\r\n * Normally, when axis is zoomed in, a zoom out button is shown by a chart,\r\n * and vice versa: when axis is zoomed out completely, zoom out button is\r\n * hidden.\r\n *\r\n * Setting this to `false` will disable this behavior. Zooming in our out\r\n * this axis will not reveal or hide zoom out button.\r\n *\r\n * @default true\r\n * @since 4.6.2\r\n * @param value Toggle zoom out button?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"toggleZoomOutButton\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hides element's [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n */\r\n Axis.prototype.hideTooltip = function (duration) {\r\n _super.prototype.hideTooltip.call(this, duration);\r\n this._tooltipPosition = undefined;\r\n };\r\n /**\r\n * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n *\r\n * @param position Position (0-1)\r\n * @param local or global position\r\n */\r\n Axis.prototype.showTooltipAtPosition = function (position, local) {\r\n var tooltip = this._tooltip;\r\n if (!tooltip || this.dataItems.length <= 0) {\r\n this._tooltipPosition = undefined;\r\n }\r\n else {\r\n if (!local) {\r\n position = this.toAxisPosition(position);\r\n }\r\n if (!$type.isNumber(position) || position < this.start || position > this.end) {\r\n tooltip.hide(0);\r\n this._tooltipPosition = undefined;\r\n return;\r\n }\r\n var renderer = this.renderer;\r\n //@todo: think of how to solve this better\r\n if (!tooltip.parent) {\r\n tooltip.parent = this.tooltipContainer;\r\n }\r\n var tooltipLocation = renderer.tooltipLocation;\r\n var startPosition = this.getCellStartPosition(position);\r\n var endPosition = this.getCellEndPosition(position);\r\n if (this.tooltipPosition == \"fixed\") {\r\n position = startPosition + (endPosition - startPosition) * tooltipLocation;\r\n }\r\n position = $math.fitToRange(position, this.start, this.end);\r\n if (this._tooltipPosition != position) {\r\n this._tooltipPosition = position;\r\n var tooltipLocation2 = renderer.tooltipLocation2;\r\n var startPoint = renderer.positionToPoint(startPosition, tooltipLocation2);\r\n var endPoint = renderer.positionToPoint(endPosition, tooltipLocation2);\r\n // save values so cursor could use them\r\n this.currentItemStartPoint = startPoint;\r\n this.currentItemEndPoint = endPoint;\r\n if (renderer.fullWidthTooltip) {\r\n tooltip.width = endPoint.x - startPoint.x;\r\n tooltip.height = endPoint.y - startPoint.y;\r\n }\r\n var point = renderer.positionToPoint(position, tooltipLocation2);\r\n var globalPoint = $utils.spritePointToSvg(point, this.renderer.line);\r\n tooltip.text = this.getTooltipText(position);\r\n if (tooltip.text) {\r\n tooltip.delayedPointTo(globalPoint);\r\n tooltip.show();\r\n }\r\n }\r\n if (!this.cursorTooltipEnabled || this.tooltip.disabled) {\r\n tooltip.hide(0);\r\n }\r\n }\r\n };\r\n /**\r\n * Converts relative position (0-1) to Axis position with zoom level and\r\n * inversed taken into account.\r\n *\r\n * @param position Global position (0-1)\r\n * @return Position within Axis (0-1)\r\n */\r\n Axis.prototype.toAxisPosition = function (position) {\r\n position = this.renderer.toAxisPosition(position);\r\n if (position == undefined) {\r\n return;\r\n }\r\n position = position * (this.end - this.start);\r\n if (this.renderer.inversed) {\r\n position = this.end - position;\r\n }\r\n else {\r\n position = this.start + position;\r\n }\r\n return position;\r\n };\r\n /**\r\n * Converts position on the axis with zoom level and\r\n * inversed taken into account to global position.\r\n *\r\n * @param position Axis position (0-1)\r\n * @return Global position (0-1)\r\n */\r\n Axis.prototype.toGlobalPosition = function (position) {\r\n if (this.renderer.inversed) {\r\n position = this.end - position;\r\n }\r\n else {\r\n position = position - this.start;\r\n }\r\n return position / (this.end - this.start);\r\n };\r\n /**\r\n * Returns text to be used for cursor's Axis tooltip.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position coordinate (px)\r\n * @return Label text\r\n */\r\n Axis.prototype.getTooltipText = function (position) {\r\n return;\r\n };\r\n /**\r\n * Updates Axis' tooltip's position and possibly size, and pointer (stem)\r\n * place.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointerOrientation Pointer (stem) orientation\r\n * @param boundingRectangle A rectangle for tooltip to fit within\r\n */\r\n Axis.prototype.updateTooltip = function (pointerOrientation, boundingRectangle) {\r\n var tooltip = this._tooltip;\r\n if (tooltip) {\r\n tooltip.fixDoc = false;\r\n tooltip.pointerOrientation = pointerOrientation;\r\n tooltip.setBounds($utils.spriteRectToSvg(boundingRectangle, this.renderer.line));\r\n }\r\n };\r\n /**\r\n * [roundPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position Relative position\r\n * @param location Location on axis\r\n * @return Rounded position\r\n */\r\n Axis.prototype.roundPosition = function (position, location, axisLocation) {\r\n return position;\r\n };\r\n /**\r\n * [getCellStartPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getCellStartPosition = function (position) {\r\n return position;\r\n };\r\n /**\r\n * [getCellEndPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param position [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getCellEndPosition = function (position) {\r\n return position;\r\n };\r\n Object.defineProperty(Axis.prototype, \"axisRanges\", {\r\n /**\r\n * A list of axis ranges for this Axis.\r\n *\r\n * @return Axis ranges\r\n */\r\n get: function () {\r\n if (!this._axisRanges) {\r\n var dataItem = this.createDataItem();\r\n dataItem.isRange = true;\r\n dataItem.axisFill = this.renderer.axisFills.template.clone();\r\n dataItem.grid = this.renderer.grid.template.clone();\r\n dataItem.tick = this.renderer.ticks.template.clone();\r\n dataItem.label = this.renderer.labels.template.clone();\r\n dataItem.isTemplate = true;\r\n dataItem.component = this;\r\n dataItem.axisFill.disabled = false;\r\n dataItem.tick.disabled = false;\r\n dataItem.grid.disabled = false;\r\n dataItem.label.disabled = false;\r\n this._axisRanges = new ListTemplate(dataItem);\r\n this._axisRanges.events.on(\"inserted\", this.processAxisRange, this, false);\r\n this._disposers.push(new ListDisposer(this._axisRanges));\r\n this._disposers.push(this._axisRanges.template);\r\n }\r\n return this._axisRanges;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates an axis range after it has been added to the axis range list.\r\n *\r\n * @param event Event\r\n */\r\n Axis.prototype.processAxisRange = function (event) {\r\n var axisRange = event.newValue;\r\n axisRange.component = this;\r\n axisRange.isRange = true;\r\n };\r\n Object.defineProperty(Axis.prototype, \"axisBreaks\", {\r\n /**\r\n * A list of axis breaks on this Axis.\r\n *\r\n * @return Axis breaks.\r\n */\r\n get: function () {\r\n if (!this._axisBreaks) {\r\n this._axisBreaks = new SortedListTemplate(this.createAxisBreak(), function (a, b) {\r\n return $number.order(a.adjustedStartValue, b.adjustedStartValue);\r\n });\r\n this._axisBreaks.events.on(\"inserted\", this.processBreak, this, false);\r\n this._disposers.push(new ListDisposer(this._axisBreaks));\r\n this._disposers.push(this._axisBreaks.template);\r\n }\r\n return this._axisBreaks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a new axis break.\r\n *\r\n * @return Axis break\r\n */\r\n Axis.prototype.createAxisBreak = function () {\r\n return new AxisBreak();\r\n };\r\n Object.defineProperty(Axis.prototype, \"series\", {\r\n /**\r\n * A list of Series currently associated with this Axis.\r\n *\r\n * @return Series\r\n */\r\n get: function () {\r\n if (!this._series) {\r\n this._series = new List();\r\n }\r\n return this._series;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes Series' data items.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.processSeriesDataItems = function () {\r\n };\r\n /**\r\n * Processes Series' single data item.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n Axis.prototype.processSeriesDataItem = function (dataItem, axisLetter) {\r\n };\r\n /**\r\n * Post-processes Serie's data items.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.postProcessSeriesDataItems = function (series) {\r\n };\r\n /**\r\n * Post-processes Serie's single data item.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n Axis.prototype.postProcessSeriesDataItem = function (dataItem) {\r\n };\r\n //\r\n /**\r\n * Updates Axis based on all Series that might influence it.\r\n *\r\n * Called by Series after Series data is validated.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.updateAxisBySeries = function () {\r\n };\r\n /**\r\n * Hides unused data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Axis.prototype.hideUnusedDataItems = function () {\r\n var _this = this;\r\n // hide all unused\r\n var dataItemsIterator = this._dataItemsIterator;\r\n dataItemsIterator.createNewItems = false;\r\n $iter.each(dataItemsIterator.iterator(), function (dataItem) {\r\n _this.validateDataElement(dataItem); // solves shrinking\r\n dataItem.__disabled = true;\r\n });\r\n dataItemsIterator.clear();\r\n dataItemsIterator.createNewItems = true;\r\n };\r\n /**\r\n * Returns a Series' data item that corresponds to specific position on Axis.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param series Series\r\n * @param position Position (0-1)\r\n * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n * @return Data item\r\n */\r\n Axis.prototype.getSeriesDataItem = function (series, position, findNearest) {\r\n return;\r\n };\r\n /**\r\n * Returns an angle that corresponds to specific position on axis.\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key ???\r\n * @param location Location\r\n * @param stackKey ???\r\n * @return Angle\r\n */\r\n Axis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\r\n return;\r\n };\r\n /**\r\n * [getX description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getX = function (dataItem, key, location, stackKey, range) {\r\n return;\r\n };\r\n /**\r\n * [getX description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\r\n return;\r\n };\r\n /**\r\n * [getY description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getY = function (dataItem, key, location, stackKey, range) {\r\n return;\r\n };\r\n /**\r\n * [getY description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @param stackKey [description]\r\n * @return [description]\r\n */\r\n Axis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\r\n return;\r\n };\r\n Object.defineProperty(Axis.prototype, \"basePoint\", {\r\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point coordinates\r\n */\r\n get: function () {\r\n return { x: 0, y: 0 };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n * This is a placeholder to override for extending classes.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n Axis.prototype.dataChangeUpdate = function () {\r\n };\r\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n Axis.prototype.seriesDataChangeUpdate = function (series) {\r\n };\r\n /**\r\n * Removes axis breaks that fall between `min` and `max` (???)\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param min Start value\r\n * @param max End value\r\n * @return Spread o\r\n */\r\n Axis.prototype.adjustDifference = function (min, max) {\r\n var difference = max - min;\r\n if ($type.isNumber(difference)) {\r\n if (this._axisBreaks) {\r\n $iter.eachContinue(this._axisBreaks.iterator(), function (axisBreak) {\r\n var startValue = axisBreak.adjustedStartValue;\r\n var endValue = axisBreak.adjustedEndValue;\r\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\r\n // breaks are sorted, we don't need go further anymore\r\n if (startValue > max) {\r\n return false;\r\n }\r\n if (endValue >= min) {\r\n if ($type.isNumber(startValue) && $type.isNumber(endValue)) {\r\n var breakSize = axisBreak.breakSize;\r\n var intersection = $math.intersection({ start: startValue, end: endValue }, { start: min, end: max });\r\n if (intersection) {\r\n difference -= (intersection.end - intersection.start) * (1 - breakSize);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n return difference;\r\n }\r\n };\r\n /**\r\n * Checks if specific value falls within a break.\r\n *\r\n * Returns [[AxisBreak]] the value falls into.\r\n *\r\n * @param value Value to check\r\n * @return Axis break\r\n */\r\n Axis.prototype.isInBreak = function (value) {\r\n if (this._axisBreaks) {\r\n return $iter.find(this._axisBreaks.iterator(), function (axisBreak) {\r\n return value >= axisBreak.adjustedStartValue &&\r\n value <= axisBreak.adjustedEndValue;\r\n });\r\n }\r\n };\r\n /**\r\n * [fixAxisBreaks description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n Axis.prototype.fixAxisBreaks = function () {\r\n var _this = this;\r\n if (this._axisBreaks) {\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks.length > 0) {\r\n // first make sure that startValue is <= end value\r\n // This needs to make a copy of axisBreaks because it mutates the list while traversing\r\n // TODO very inefficient\r\n $array.each($iter.toArray(axisBreaks.iterator()), function (axisBreak) {\r\n var startValue = $math.min(axisBreak.startValue, axisBreak.endValue);\r\n var endValue = $math.max(axisBreak.startValue, axisBreak.endValue);\r\n axisBreak.adjustedStartValue = startValue;\r\n axisBreak.adjustedEndValue = endValue;\r\n _this._axisBreaks.update(axisBreak);\r\n });\r\n var firstAxisBreak = axisBreaks.first;\r\n var previousEndValue_1 = Math.min(firstAxisBreak.startValue, firstAxisBreak.endValue);\r\n // process breaks\r\n // TODO does this need to call axisBreaks.update ?\r\n $iter.each(axisBreaks.iterator(), function (axisBreak) {\r\n var startValue = axisBreak.adjustedStartValue;\r\n var endValue = axisBreak.adjustedEndValue;\r\n // breaks can't overlap\r\n // if break starts before previous break ends\r\n if (startValue < previousEndValue_1) {\r\n startValue = previousEndValue_1;\r\n if (endValue < previousEndValue_1) {\r\n endValue = previousEndValue_1;\r\n }\r\n }\r\n axisBreak.adjustedStartValue = startValue;\r\n axisBreak.adjustedEndValue = endValue;\r\n });\r\n }\r\n }\r\n };\r\n Object.defineProperty(Axis.prototype, \"startIndex\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return [description]\r\n */\r\n get: function () {\r\n return 0;\r\n },\r\n /**\r\n * We need start/end indexes of axes to be 0 - `dataItems.length`.\r\n *\r\n * Yes, also for category axis, this helps to avoid jumping of categories\r\n * while scrolling and does not do a lot of extra work as we use\r\n * protected `_startIndex` and `_endIndex` when working with items.\r\n *\r\n * @hidden\r\n */\r\n /**\r\n * [startIndex description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"endIndex\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.dataItems.length;\r\n },\r\n /**\r\n * [endIndex description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a formatted label based on position.\r\n *\r\n * Individual axis types should override this method to generate a label\r\n * that is relevant to axis type.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\r\n Axis.prototype.getPositionLabel = function (position) {\r\n return Math.round(position * 100) + \"%x\";\r\n };\r\n Object.defineProperty(Axis.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 * A Chart this Axis belongs to.\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 * Creates a data item for a Series range.\r\n *\r\n * @param series Target Series\r\n * @return Range data item\r\n */\r\n Axis.prototype.createSeriesRange = function (series) {\r\n var range = this.axisRanges.create();\r\n range.component = this;\r\n range.axisFill = this.renderer.axisFills.template.clone();\r\n range.axisFill.disabled = false;\r\n range.axisFill.fillOpacity = 0;\r\n range.grid = this.renderer.grid.template.clone();\r\n range.grid.disabled = true;\r\n range.tick = this.renderer.ticks.template.clone();\r\n range.tick.disabled = true;\r\n range.label = this.renderer.labels.template.clone();\r\n range.label.disabled = true;\r\n range.addDisposer(new Disposer(function () {\r\n series.axisRanges.removeValue(range);\r\n }));\r\n series.axisRanges.push(range);\r\n return range;\r\n };\r\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\r\n Axis.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.renderer) {\r\n this.renderer.copyFrom(source.renderer);\r\n }\r\n else {\r\n if (source.renderer) {\r\n this.renderer = source.renderer.clone();\r\n this._disposers.push(this.renderer);\r\n }\r\n }\r\n if (source.title) {\r\n if (!this.title) {\r\n this.title = source.title.clone();\r\n this.title.parent = this;\r\n }\r\n else {\r\n this.title.copyFrom(source.title);\r\n }\r\n this._disposers.push(this.title);\r\n }\r\n };\r\n /**\r\n * Resets internal iterator.\r\n */\r\n Axis.prototype.resetIterators = function () {\r\n this._dataItemsIterator.reset();\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 Axis.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up axis ranges\r\n if ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n for (var i = 0, len = config.axisRanges.length; i < len; i++) {\r\n var range = config.axisRanges[i];\r\n // If `series` is set, we know it's a series range\r\n if ($type.hasValue(range[\"series\"])) {\r\n if ($type.isString(range[\"series\"])) {\r\n if (this.map.hasKey(range[\"series\"])) {\r\n //range[\"series\"] = this.map.getKey(range[\"series\"]);\r\n config.axisRanges[i] = this.createSeriesRange(this.map.getKey(range[\"series\"]));\r\n delete (range[\"series\"]);\r\n config.axisRanges[i].config = range;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Ordering function used in JSON setup.\r\n *\r\n * @param a Item A\r\n * @param b Item B\r\n * @return Order\r\n */\r\n Axis.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // last\r\n else if (a == \"title\") {\r\n return 1;\r\n }\r\n else if (b == \"title\") {\r\n return -1;\r\n }\r\n // first\r\n else if (a == \"component\") {\r\n return -1;\r\n }\r\n else if (b == \"component\") {\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 Object.defineProperty(Axis.prototype, \"startLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * Axis start location. Works on Date/Category axis, doesn't work on Value axis.\r\n *\r\n * * 0 - Full first cell is shown.\r\n * * 0.5 - Half of first cell is shown.\r\n * * 1 - None of the first cell is visible. (you probably don't want that)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"endLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Axis end location. Works on Date/Category axis, doesn't work on Value axis.\r\n *\r\n * * 0 - None of the last cell is shown. (don't do that)\r\n * * 0.5 - Half of the last cell is shown.\r\n * * 1 - Full last cell is shown.\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Axis.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.renderer) {\r\n this.renderer.gridContainer.disabled = value;\r\n }\r\n return changed;\r\n };\r\n Object.defineProperty(Axis.prototype, \"title\", {\r\n /**\r\n * @return Title label\r\n */\r\n get: function () {\r\n return this._title;\r\n },\r\n /**\r\n * A reference to a [[Label]] element which serves as a title to the axis.\r\n *\r\n * When axis is created it aleready has an element, so you can just modify\r\n * it.\r\n *\r\n * Or you can replace it with your own instance of `Label`.\r\n *\r\n * @param value Title label\r\n */\r\n set: function (value) {\r\n if (this._title && this._title != value) {\r\n this._title.dispose();\r\n }\r\n if (value) {\r\n this._title = value;\r\n value.parent = this;\r\n value.shouldClone = false;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"hideTooltipWhileZooming\", {\r\n /**\r\n * @return Hide tooltip while zooming?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideTooltipWhileZooming\");\r\n },\r\n /**\r\n * Indicates if axis' tooltip should be hidden while axis range is animating\r\n * (zooming)\r\n *\r\n * @default true\r\n * @since 4.7.16\r\n * @param value Hide tooltip while zooming?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideTooltipWhileZooming\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Axis.prototype, \"zoomable\", {\r\n /**\r\n * @return Zoomable?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"zoomable\");\r\n },\r\n /**\r\n * Should the axis be zoomed with scrollbar/cursor?\r\n *\r\n * @default true\r\n * @since 4.9.28\r\n * @param value Zoomable?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"zoomable\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Axis;\r\n}(Component));\r\nexport { Axis };\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[\"Axis\"] = Axis;\r\nregistry.registeredClasses[\"AxisDataItem\"] = AxisDataItem;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Disable axis tooltips.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof Axis && target.tooltip) {\r\n var state = target.states.create(stateId);\r\n state.properties.cursorTooltipEnabled = false;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=Axis.js.map","/**\r\n * Axis Tick module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick } from \"../elements/Tick\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws an axis tick\r\n * @see {@link IAxisTickEvents} for a list of available events\r\n * @see {@link IAxisTickAdapters} for a list of available Adapters\r\n */\r\nvar AxisTick = /** @class */ (function (_super) {\r\n __extends(AxisTick, _super);\r\n function AxisTick() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"AxisTick\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.location = 0.5;\r\n _this.above = false;\r\n _this.isMeasured = false;\r\n _this.pixelPerfect = true;\r\n _this.strokeOpacity = 0;\r\n _this.length = 5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisTick.prototype, \"location\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"location\");\r\n },\r\n /**\r\n * Relative location of the tick. (0-1)\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"location\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisTick.prototype, \"inside\", {\r\n /**\r\n * Returns if label is set to be drawn inside axis.\r\n *\r\n * @return Inside?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"inside\");\r\n },\r\n /**\r\n * Sets if tick should be drawn inside axis.\r\n *\r\n * @param value Inside?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"inside\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisTick.prototype, \"above\", {\r\n /**\r\n * @return Draw above series?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"above\");\r\n },\r\n /**\r\n * Normally tick goes below series. Set this to `true` to go above.\r\n *\r\n * @default false\r\n * @since 4.5.9\r\n * @param value Draw above series?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"above\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n AxisTick.prototype.setDisabled = function (value) {\r\n var changed = _super.prototype.setDisabled.call(this, value);\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n }\r\n return changed;\r\n };\r\n return AxisTick;\r\n}(Tick));\r\nexport { AxisTick };\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[\"AxisTick\"] = AxisTick;\r\n//# sourceMappingURL=AxisTick.js.map"],"sourceRoot":""}