{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/series/XYSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/elements/ChordNode.ts","webpack:///../../../../../src/.internal/core/elements/QuadraticCurve.ts","webpack:///../../../../../src/.internal/charts/elements/ChordLink.ts","webpack:///../../../../../src/.internal/charts/types/ChordDiagram.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/TreeMapSeries.ts","webpack:///../../../../../src/.internal/charts/types/TreeMap.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/XYChart3D.ts","webpack:///../../../../../src/.internal/charts/elements/Candlestick.ts","webpack:///../../../../../src/.internal/charts/series/CandlestickSeries.ts","webpack:///../../../../../src/.internal/charts/elements/OHLC.ts","webpack:///../../../../../src/.internal/charts/series/OHLCSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeries.ts","webpack:///../../../../../src/.internal/charts/elements/RadarColumn.ts","webpack:///../../../../../src/.internal/charts/series/RadarColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/PyramidSeries.ts","webpack:///../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","webpack:///../../../../../src/.internal/charts/elements/ConeColumn.ts","webpack:///../../../../../src/.internal/charts/series/ConeSeries.ts","webpack:///../../../../../src/.internal/charts/elements/CurvedColumn.ts","webpack:///../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","webpack:///../../../../../src/.internal/charts/axes/DurationAxis.ts","webpack:///../../../../../src/.internal/charts/elements/CircleBullet.ts","webpack:///../../../../../src/.internal/charts/elements/ErrorBullet.ts","webpack:///../../../../../src/.internal/charts/elements/NavigationBar.ts","webpack:///./charts.js","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts"],"names":["__webpack_require__","d","__webpack_exports__","AxisRendererCircular","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__AxisRenderer__","__WEBPACK_IMPORTED_MODULE_2__AxisFillCircular__","__WEBPACK_IMPORTED_MODULE_3__GridCircular__","__WEBPACK_IMPORTED_MODULE_4__AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_5__core_Registry__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_8__core_rendering_Path__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Type__","_super","_this","call","this","pixelRadiusReal","layout","className","isMeasured","startAngle","endAngle","useChartAngles","radius","Object","grid","template","location","labels","ticks","pixelPerfect","tooltipLocation","line","strokeOpacity","applyTheme","prototype","setAxis","axis","tooltip","adapter","add","x","target","point","pixelX","y","pixelY","pixelRadius","Math","cos","atan2","sin","validate","chart","invalid","defineProperty","PI","getPropertyValue","value","setPercentProperty","invalidate","setPropertyValue","innerRadius","positionToPoint","position","coordinate","positionToCoordinate","angle","axisLength","positionToAngle","arc","end","start","renderer","inversed","updateAxisLine","path","updateGridElement","endPosition","element","gridInnerRadius","zIndex","toggleVisibility","updateTickElement","tick","tickLength","length","inside","updateLabelElement","label","fixPosition","minLabelPosition","maxLabelPosition","fitsToBounds","invalidateAxisItems","invalidateSeries","getPositionRangePath","startPosition","cornerRadius","pixelInnerRadius","createGrid","createFill","createLabel","pointToPosition","coordinateToPosition","registeredClasses","AxisFillCircular","paper","__WEBPACK_IMPORTED_MODULE_2__core_utils_Percent__","draw","fillPath","__WEBPACK_IMPORTED_MODULE_4__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_1__AxisFill__","__WEBPACK_IMPORTED_MODULE_3__core_Registry__","DateAxisBreak_DateAxisBreak","DateAxisBreak","tslib_es6","startValue","getTime","endValue","ValueAxisBreak","Registry","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","Dictionary","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","pushAll","axisFieldName","fillRule","dataItem","component","gridInterval","_gridInterval","gridDuration","Time","round","min","axisFill","__disabled","applyInternalDefaults","hasKey","setKey","language","translate","createDataItem","createAxisBreak","validateDataItems","periodCount","max","baseDuration","maxZoomFactor","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","adjustDifference","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","ceil","_difference","floor","Iterator","series","iterator","baseAxis","field_1","getAxisField","startIndex","dataItems","findClosestIndex","endIndex","validateData","Type","minDifference","Number","MAX_VALUE","each","uid","seriesDataChangeUpdate","postProcessSeriesDataItems","JSON","stringify","_baseInterval","postProcessSeriesDataItem","addEmptyUnitsBreaks","dataItemsByAxis","getKey","utils_Object","key","time","getDate","startTime","setCalculatedValue","toString","skipEmptyPeriods","axisBreaks","clear","axisBreak","startTimeStr","this_1","undefined","create","startDate","fixAxisBreaks","breakGridCount","adjustedEndValue","adjustedStartValue","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","isInBreak","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","resetIterators","this_2","format","markUnitChange","text","dateFormatter","find","appendDataItem","validateDataElement","renderer_1","breakSize","timeUnit_1","intervalCount_1","utils_Math","startPoint","endPoint","minGridDistance","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","valueToPosition","fillEndPosition","isRange","disabled","fill","updateFillElement","mask","location_1","adjustMinMax","step","fixMin","startLocation","fixMax","endLocation","index","duration","gridCount","getIndex","intervalDuration","lastIndex","formatLabel","dateToPosition","anyToPosition","dateToPoint","anyToPoint","valueToPoint","positionToDate","positionToValue","getX","getTimeByLocation","baseValue","getY","stack","getValue","getAngle","stackKey","workingLocations","endTime","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","difference","abs","differece","updateAxisBySeries","timeInterval","invalidateData","breakTemplate","startLine","endLine","fillShape","getTooltipText","tooltipDateFormat","dateFormat","getPositionLabel","apply","roundPosition","getCellStartPosition","getCellEndPosition","getSeriesDataItem","findNearest","key_1","getCurrentLabelFormat","initRenderer","baseGrid","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","xAxis","dateX","yAxis","dateY","closestTime_1","seriesPoints_1","showTooltipAtDataItem","push","sortSeriesTooltips","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","indexToPosition","invalidateDataItems","category","categoryToIndex","AxisBreak","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","locations","endCategory","isEnabled","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","_lastDataItem","_disposers","validateDataRange","_series","invalidateDataRange","firstSeriesDataItem","lastSeriesDataItem","positionToIndex","i","fdi","getFirstSeriesDataItem","ldi","getLastSeriesDataItem","dataCount","maxCount","frequency","_startIndex","_endIndex","_frequency","itemIndex","len","frequency_1","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","fillEndIndex","fillPosition","measuredWidth","measuredHeight","currentText","processDataItem","dataContext","existingDataItem","remove","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","categoryX","categoryY","index_1","sdi_1","category_1","seriesDataItem","categories","basePoint","breakStartPosition","breakEndPosition","breakPosition","XYSeries_XYSeriesDataItem","XYSeriesDataItem","valueX","valueY","openValueX","openValueY","openDateX","openDateY","setLocation","setValue","setCategory","openCategoryX","openCategoryY","getMin","fields","working","stackValue","utils_Array","getWorkingValue","getMax","Series","XYSeries_XYSeries","XYSeries","_xAxis","Disposer","_yAxis","_xValueFields","_yValueFields","cursorTooltipEnabled","mainContainer","Sprite","setElement","stacked","pointerOrientation","events","on","returnBulletDefaultState","readerTitle","dataChangeUpdate","_tmin","_tmax","_smin","_smax","defineFields","data","updateItemReaderText","dataFields","_xField","_yField","Error","name","disable","enable","setInitialWorkingValues","e","_chart","raiseCriticalError","disposeData","dataItemsX","dataItemsY","xAxisFieldName","xField","xOpenField","Utils","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","range","Path","width","height","dataRangeInvalid","_showBullets","minBulletDistance","get","xAxes","oldAxis","removeKey","dispose","removeValue","set","registerSeries","yAxes","_baseAxis","processValues","minX","Infinity","maxX","minY","maxY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","stackedSeries","dispatchImmediately","appeared","hideTooltip","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","isShowing","tooltipText","updateLegendValue","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","type","_a","bullets","_b","next","done","isHover","showTooltip","bullet","isDisposed","positionBullet","hasValue","bulletLocationX","getBulletLocationX","bulletLocationY","getBulletLocationY","locationX","locationY","moveTo","bulletLocation","show","anim","delay","interpolationDuration","defaultState","transitionDuration","a","sequencedInterpolation","sequencedInterpolationDelay","animation","isFinished","hide","minZoomed","maxZoomed","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","invalidateProcessedData","backwards","prevSeries","prevDataItem","prevValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processConfig","config","map","processingErrors","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","Cursor_Cursor","Cursor","_stick","Percent","shouldClone","trackable","clickable","interaction","Interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","event","interactionsEnabled","_generalBehavior","downPoint","isLocalElement","pointer","svg","_stickPoint","triggerMove","isHidden","hideReal","stick","triggerMoveReal","invalidatePosition","getPositions","dispatch","triggerDown","triggerDownReal","setGlobalStyle","Mouse","grabbing","triggerUp","triggerUpReal","updatePoint","upPoint","_upPointOrig","_downPointOrig","getHitOption","interactions","default","updateSelection","innerWidth","innerHeight","cancelable","preventDefault","plotContainer","lockElement","Container","XYCursor_XYCursor","XYCursor","_lineX","_lineY","behavior","maxPanOut","interfaceColors","InterfaceColorSet","selection","createChild","fillOpacity","getFor","lineX","stroke","Color","strokeDasharray","lineY","updateSize","_usesSelection","w","_positionPrecision","h","pixelHeight","pixelWidth","validatePosition","fixPoint","snapToSeries","updateLinePositions","getPanningRanges","selectionX","selectionY","getRanges","startX","startY","deltaX","deltaY","xRange","yRange","endX","endY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","parent","reset","_selection","_snapToDisposer","handleSnap","opposite","animationDuration","easing","animationEasing","animate","property","to","XYChartScrollbar_XYChartScrollbar","XYChartScrollbar","padding","scrollbarChart","XYChart_XYChart","margin","_scrollbarChart","minHeight","minWidth","unselectedOverlay","toBack","_unselectedOverlay","background","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","sourceSeries","newValue","zoomOutButton","addXAxis","addYAxis","clone","title","rangeChangeDuration","id","axisFills","showOnInit","zoomOutAxes","filters","DesaturateFilter","updateByOrientation","orientation","clonedFrom","oldValue","off","handleDataChanged","dataProvider","updateThumb","Scrollbar","XYChart_XYChartDataItem","XYChartDataItem","SerialChart","XYChart","_axisRendererX","AxisRendererX","_axisRendererY","AxisRendererY","maskBullets","arrangeTooltips","chartContainer","topAxesCont","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","_bulletMask","exportable","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","_xAxes","handleAxisRemoval","autoDispose","_yAxes","colors","_cursor","cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","createCursor","showSeriesTooltip","exceptAxis","showAxisTooltip","hideObjectTooltip","sprites","sprite","seriesPoints","setBounds","topLeft","bottomRight","sum","filteredSeriesPoints","seriesPoint","sort","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","priority","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","panStartRange","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","dataInvalid","diff","handleWheel","svgPoint","htmlContainer","cssScale","plotPoint","shift","rangeX","rangeY","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","maxWidth","maxHeight","_mouseWheelDisposer","wheelable","hoverable","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","configOrder","createSeries","_zoomOutButton","button","addData","rawDataItem","removeCount","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","connect","tensionX","tensionY","segmentsContainer","previousDataItem","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegment","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","propertyFields","openIndex","closeIndex","propertiesChanged","getFirst","contents","hasProperties","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","Line","x2","Rectangle","legendDataItem","color","colorOrig","copyToLegendMarker","hasLabels_1","children","child","Label","RadarSeries_RadarSeriesDataItem","RadarSeriesDataItem","RadarSeries_RadarSeries","RadarSeries","connectEnds","unshift","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius","innerRadiusModifyer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","horizontalCenter","verticalCenter","rotation","gridLocation","count_1","cellEndLocation","positionItem","updateBaseGridElement","count_2","updateBreakElement","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","bigNum","axisFullLength","RadarChart_RadarChartDataItem","RadarChartDataItem","RadarChart_RadarChart","RadarChart","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","hr","mr","maxRadius","diameter","_pixelInnerRadius","definedBBox","ClockHand_ClockHand","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","_value","newAngle","currentAngle","rotationDirection","updateValue","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","processHand","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries","PieSeries3D_PieSeries3D","PieSeries3D","createSlice","Slice3D","slice","depth","depthPercent","percent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","PercentChart","SlicedChart_SlicedChart","SlicedChart","ChordNode_ChordNode","ChordNode","AxisLabelCircular","updateRotation","Slice","setStateOnChildren","ix","iy","invalidateLinks","total","arc_1","sliceStartAngle_1","Bullet","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","_outgoingSorted","link","linksContainer","nonRibbon","percentWidth","valueAngle","toNode","_incomingSorted","fromNode","mAngle","trueStartAngle","tx","ty","dx","dy","FlowDiagramNode","QuadraticCurve_QuadraticCurve","QuadraticCurve","y1","y2","cpx","cpy","p1","p2","cp","point1","point2","ChordLink_ChordLink","ChordLink","middleLine","isTemplate","fromX","fromY","toX","toY","bulletsMask","mAngle1","mAngle2","positionBullets","FlowDiagramLink","ChordDiagram_ChordDiagramDataItem","ChordDiagramDataItem","FlowDiagram","ChordDiagram_ChordDiagram","ChordDiagram","nodePadding","chordContainer","nodesContainer","newTotal","_sorted","strNode","node","getNodeValue","minNodeSize","links","createNode","createLink","ColumnSeries_ColumnSeriesDataItem","ColumnSeriesDataItem","_column","column","setColumn","addSprite","columns","_rangesColumns","ColumnSeries_ColumnSeries","ColumnSeries","_startLocation","_endLocation","clustered","columnsContainer","_columnsContainer","baseAxisSeries","clusterCount","cellStartLocation","disableUnusedColumns","validateDataElementReal","getStartLocation","simplifiedProcessing","getEndLocation","l","r","t","percentHeight","pixelPaddingLeft","pixelPaddingRight","paddingTop","pixelPaddingTop","paddingBottom","pixelPaddingBottom","outOfBounds","offset","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","axisLenght","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","once","ev","populateString","realX","realY","realWidth","realHeight","virtualParent","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","open_1","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","createColumnTemplate","Column","fromOpenState_1","fromPreviousState_1","removeChildren","RoundedRectangle","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries_TreeMapSeries","TreeMapSeries","configField","showReal","TreeMap_TreeMapDataItem","TreeMapDataItem","rows","y0","hasChildren","getDuration","childValue","level","TreeMap_TreeMap","TreeMap","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","ColorSet","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","homeDataItem","_homeText","layoutItems","_updateDataItemIndexes","_tempSeries","navigationData","parentDataItem","initSeries","reverse","createTreeSeriesReal","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","currentlyZoomed","rangeChangeAnimation","_dataDisposers","binaryTree","dice","sliceDice","validateLayout","validateRawData","nodes","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","sqrt","i0","i1","row","handleDataItemValueChange","feedLegend","legend","legendData_1","hiddenInLegend","AxisRendererX3D_AxisRendererX3D","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D_AxisRendererY3D","AxisRendererY3D","getWidth","ColumnSeries3D_ColumnSeries3DDataItem","ColumnSeries3DDataItem","ColumnSeries3D_ColumnSeries3D","ColumnSeries3D","column3D","Column3D","XYChart3D_XYChart3DDataItem","XYChart3DDataItem","XYChart3D_XYChart3D","XYChart3D","fixLayout","fixColumns","depthIndex","s","i_1","maskColumns","Candlestick_Candlestick","Candlestick","createAssets","lowLine","highLine","CandlestickSeries_CandlestickSeriesDataItem","CandlestickSeriesDataItem","lowValueX","lowValueY","highValueX","highValueY","CandlestickSeries_CandlestickSeries","CandlestickSeries","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","cw","ch","OHLC_OHLC","OHLC","openLine","highLowLine","closeLine","OHLCSeries_OHLCSeriesDataItem","OHLCSeriesDataItem","OHLCSeries_OHLCSeries","OHLCSeries","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesSegment_StepLineSeriesSegment","StepLineSeriesSegment","noRisers","vertical","StepLineSeries_StepLineSeriesDataItem","StepLineSeriesDataItem","StepLineSeries_StepLineSeries","StepLineSeries","prevPoint","point0","RadarColumn_RadarColumn","RadarColumn","radarColumn","getTooltipX","getTooltipY","RadarColumnSeries_RadarColumnSeriesDataItem","RadarColumnSeriesDataItem","RadarColumnSeries_RadarColumnSeries","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","temp","PyramidSeries_PyramidSeriesDataItem","PyramidSeriesDataItem","FunnelSeries","PyramidSeries_PyramidSeries","PyramidSeries","topWidth","bottomWidth","pyramidHeight","valueIs","sliceLinks","_nextWidth","getNextValue","nextValue","slicesContainer","relValue","sliceLink","_pyramidHeight","_pyramidWidth","labelsContainer","ticksContainer","decorateSlice","pyramidWidth","linkWidth","linkHeight","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","square","_nextY","alignLabels","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","scale","pictureHeight","newWidth","newHeight","initSlice","hs","expandDistance","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","radiusY","CurvedColumn_CurvedColumn","CurvedColumn","curvedColumn","tension","CurvedColumnSeries_CurvedColumnSeriesDataItem","CurvedColumnSeriesDataItem","CurvedColumnSeries_CurvedColumnSeries","CurvedColumnSeries","DurationAxis_DurationAxisDataItem","DurationAxisDataItem","DurationAxis_DurationAxis","DurationAxis","_baseUnit","durationFormatter","axisDurationFormat","strictMode","minMaxStep","baseUnit","initialMin","initialMax","divisors","realDivisor","divisors_1","divisors_1_1","divisor","exponent","log","LOG10E","power","pow","reducedCount","getValueUnit","getFormat","_tooltipDurationFormat","_stepDecimalPlaces","tooltipDurationFormat","CircleBullet_CircleBullet","CircleBullet","circle","ErrorBullet_ErrorBullet","ErrorBullet","errorLine","isDynamic","NavigationBar_NavigationBarDataItem","NavigationBarDataItem","DataItem","NavigationBar_NavigationBar","NavigationBar","textLink","TextLink","_linksIterator","triangle","Triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","Component","window","am4charts","charts_namespaceObject","GridCircular","__WEBPACK_IMPORTED_MODULE_1__Grid__","__WEBPACK_IMPORTED_MODULE_2__core_Registry__"],"mappings":"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","file":"charts.js","sourcesContent":["/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer, IAxisRendererProperties, IAxisRendererAdapters, IAxisRendererEvents } from \"./AxisRenderer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\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\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlabel.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\r\n}\r\n\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[\"AxisRendererCircular\"] = AxisRendererCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisFill, IAxisFillProperties, IAxisFillAdapters, IAxisFillEvents } from \"./AxisFill\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { AxisRendererCircular } from \"./AxisRendererCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularProperties extends IAxisFillProperties {\r\n\r\n\t/**\r\n\t * Inner radius. Relative ir absolute.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius. Relative or absolute.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t */\r\n\tcornerRadius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularEvents extends IAxisFillEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisFillCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisFillCircularAdapters extends IAxisFillAdapters, IAxisFillCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Provides fill element functionality for circular Axes.\r\n *\r\n * @see {@link IAxisFillCircularEvents} for a list of available events\r\n * @see {@link IAxisFillCircularAdapters} for a list of available Adapters\r\n * @todo Needs description\r\n */\r\nexport class AxisFillCircular extends AxisFill {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisFillCircularEvents;\r\n\r\n\t/**\r\n\t * An SVG path, used to draw fill shape.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic fillPath: string;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tconstructor(axis: Axis) {\r\n\t\tsuper(axis);\r\n\r\n\t\tthis.className = \"AxisFillCircular\";\r\n\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\t\t\tthis.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n\t\t\tthis.path = this.fillPath;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @param value Corner radius (px)\r\n\t */\r\n\tpublic set cornerRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"cornerRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Corner radius (px)\r\n\t */\r\n\tpublic get cornerRadius(): number {\r\n\t\treturn this.getPropertyValue(\"cornerRadius\");\r\n\t}\r\n\r\n}\r\n\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[\"AxisFillCircular\"] = AxisFillCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisFillCircular.ts","/**\r\n * DateAxisBreak includes functionality to add breaks on a [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { ValueAxisBreak, IValueAxisBreakProperties, IValueAxisBreakAdapters, IValueAxisBreakEvents } from \"./ValueAxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DateAxis } from \"./DateAxis\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[DateAxisBreak]].\r\n */\r\nexport interface IDateAxisBreakProperties extends IValueAxisBreakProperties {\r\n\r\n\t/**\r\n\t * A `Date` break starts on.\r\n\t */\r\n\tstartDate?: Date;\r\n\r\n\t/**\r\n\t * A `Date` break ends on.\r\n\t */\r\n\tendDate?: Date;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxisBreak]]\r\n */\r\nexport interface IDateAxisBreakEvents extends IValueAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisBreakAdapters extends IValueAxisBreakAdapters, IDateAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to define breaks for [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n *\r\n * @see {@link IDateAxisBreakEvents} for a list of available events\r\n * @see {@link IDateAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxisBreak extends ValueAxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t */\r\n\tpublic _axisType: DateAxis;\r\n\r\n\t/**\r\n\t * [gridInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [gridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridDate: Date;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting date for the break.\r\n\t *\r\n\t * @param value Start date\r\n\t */\r\n\tpublic set startDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"startDate\", value)) {\r\n\t\t\tthis.startValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start date\r\n\t */\r\n\tpublic get startDate(): Date {\r\n\t\treturn this.getPropertyValue(\"startDate\");\r\n\t}\r\n\r\n\t/**\r\n\t * Ending date for the break.\r\n\t *\r\n\t * @param value End date\r\n\t */\r\n\tpublic set endDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"endDate\", value)) {\r\n\t\t\tthis.endValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.getPropertyValue(\"endDate\");\r\n\t}\r\n\r\n}\r\n\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[\"DateAxisBreak\"] = DateAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxisBreak.ts","/**\r\n * DateAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\r\n\t\t// Translatable defaults are applied in `applyInternalDefaults()`\r\n\t\t// ...\r\n\r\n\t\t// Define default intervals\r\n\t\tthis.gridIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 5 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 50 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 500 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 5 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"second\", count: 30 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 5 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 15 },\r\n\t\t\t{ timeUnit: \"minute\", count: 30 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"hour\", count: 3 },\r\n\t\t\t{ timeUnit: \"hour\", count: 6 },\r\n\t\t\t{ timeUnit: \"hour\", count: 12 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 2 },\r\n\t\t\t{ timeUnit: \"day\", count: 3 },\r\n\t\t\t{ timeUnit: \"day\", count: 4 },\r\n\t\t\t{ timeUnit: \"day\", count: 5 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 2 },\r\n\t\t\t{ timeUnit: \"month\", count: 3 },\r\n\t\t\t{ timeUnit: \"month\", count: 6 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 2 },\r\n\t\t\t{ timeUnit: \"year\", count: 5 },\r\n\t\t\t{ timeUnit: \"year\", count: 10 },\r\n\t\t\t{ timeUnit: \"year\", count: 50 },\r\n\t\t\t{ timeUnit: \"year\", count: 100 },\r\n\t\t\t{ timeUnit: \"year\", count: 200 },\r\n\t\t\t{ timeUnit: \"year\", count: 500 },\r\n\t\t\t{ timeUnit: \"year\", count: 1000 },\r\n\t\t\t{ timeUnit: \"year\", count: 2000 },\r\n\t\t\t{ timeUnit: \"year\", count: 5000 },\r\n\t\t\t{ timeUnit: \"year\", count: 10000 },\r\n\t\t\t{ timeUnit: \"year\", count: 100000 }\r\n\t\t]);\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"date\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Set default date formats\r\n\t\tif (!this.dateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\t // not a mistake\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"year\")) {\r\n\t\t\tthis.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet periodCount: number = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.maxZoomFactor = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet newPeriodCount: number = (this.max - this.min) / this.baseDuration;\r\n\t\tstart = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n\t\tthis.zoom({ start: start, end: end }, false, true); // added instantlyto solve zoomout problem when we have axes gaps. @todo: check how this affects maxZoomFactor\r\n\t}\r\n\r\n\t/**\r\n\t * Handles process after zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Does nothing?\r\n\t */\r\n\tpublic handleSelectionExtremesChange(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates all positions, related to axis as per current zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic calculateZoom(): void {\r\n\t\tsuper.calculateZoom();\r\n\r\n\t\tlet gridInterval: ITimeInterval = this.chooseInterval(0, this.adjustDifference(this._minZoomed, this._maxZoomed), this._gridCount);\r\n\r\n\t\tif ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n\t\t\tgridInterval = { ...this.baseInterval };\r\n\t\t}\r\n\r\n\t\tthis._gridInterval = gridInterval;\r\n\r\n\t\tthis._gridDate = $time.round(new Date(this.min), gridInterval.timeUnit, gridInterval.count);\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tlet count: number = Math.ceil(this._difference / this._intervalDuration);\r\n\t\tcount = Math.floor(this.start * count) - 3; // some extra is needed\r\n\r\n\t\t$time.add(this._gridDate, gridInterval.timeUnit, count * gridInterval.count);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = series.getAxisField(this);\r\n\r\n\t\t\t\t// TODO use $type.castNumber ?\r\n\t\t\t\tlet startIndex: number = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet endIndex: number = series.dataItems.findClosestIndex(this._maxZoomed - 1, (x) => x[field], \"right\") + 1;\r\n\r\n\t\t\t\tseries.startIndex = startIndex;\r\n\t\t\t\tseries.endIndex = endIndex;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tif (!$type.isNumber(this.baseInterval.count)) {\r\n\t\t\tthis.baseInterval.count = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get minDifference(): number {\r\n\t\tvar minDifference = Number.MAX_VALUE;\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (minDifference > this._minDifference[series.uid]) {\r\n\t\t\t\tminDifference = this._minDifference[series.uid];\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n\t\t\tminDifference = $time.getDuration(\"day\");\r\n\t\t}\r\n\r\n\t\treturn minDifference;\r\n\t}\r\n\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic seriesDataChangeUpdate(series: XYSeries): void {\r\n\t\tthis._minDifference[series.uid] = Number.MAX_VALUE;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItems description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic postProcessSeriesDataItems(): void {\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (JSON.stringify(series._baseInterval[this.uid]) != JSON.stringify(this.baseInterval)) {\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t\t});\r\n\t\t\t\tseries._baseInterval[this.uid] = this.baseInterval;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet baseInterval: ITimeInterval = this.baseInterval;\r\n\r\n\t\tlet series: XYSeries = dataItem.component;\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet time = date.getTime();\r\n\r\n\t\t\tlet startDate: Date = $time.round(new Date(time), baseInterval.timeUnit, baseInterval.count);\r\n\t\t\tlet startTime = startDate.getTime();\r\n\t\t\tlet endDate: Date = $time.add(new Date(startTime), baseInterval.timeUnit, baseInterval.count);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startTime, \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\r\n\t\t\tdataItemsByAxis.setKey(startTime.toString(), dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tthis.axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\r\n\t\t\tlet date: Date = $time.round(new Date(this.min), timeUnit, count);\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\t\tif (axisBreaks.length > 0) {\r\n\t\t\t// process breaks\r\n\t\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\t\tlet breakGridCount: number = Math.ceil(this._gridCount * (Math.min(this.end, axisBreak.endPosition) - Math.max(this.start, axisBreak.startPosition)) / (this.end - this.start));\r\n\t\t\t\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\t\tlet gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxisBreak.gridDate = gridDate;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getGridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param date [description]\r\n\t * @param intervalCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getGridDate(date: Date, intervalCount: number): Date {\r\n\t\tlet timeUnit: TimeUnit = this._gridInterval.timeUnit;\r\n\t\tlet realIntervalCount: number = this._gridInterval.count;\r\n\t\t// round date\r\n\t\t$time.round(date, timeUnit, 1);\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param axisBreak [description]\r\n\t * @param timeUnit [description]\r\n\t * @param count [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(date, timeUnit, count);\r\n\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate($time.copy(prevGridDate), intervalCount);\r\n\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet text = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\t$iter.each(this.axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count).getTime();\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\tif (timestamp > axisBreak.adjustedStartValue && timestamp < axisBreak.adjustedEndValue) {\r\n\t\t\t\t\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\t\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\t\t\t\t\tlet format: string = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\t\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet text: string = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > 1) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / this._gridInterval.count;\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.position = position;\r\n\r\n\t\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\t\tif (tick && !tick.disabled) {\r\n\t\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet grid: Grid = dataItem.grid;\r\n\t\t\tif (grid && !grid.disabled) {\r\n\t\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\t\tif (fill && !fill.disabled) {\r\n\t\t\t\trenderer.updateFillElement(fill, position, fillEndPosition);\r\n\t\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\t\tthis.fillRule(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\t\tif (mask) {\r\n\t\t\t\trenderer.updateFillElement(mask, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet label: AxisLabel = dataItem.label;\r\n\t\t\tif (label && !label.disabled) {\r\n\t\t\t\tlet location = label.location;\r\n\r\n\t\t\t\tif (location == 0) {\r\n\t\t\t\t\tif (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n\t\t\t\t\t\tlocation = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlocation = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderer.updateLabelElement(label, position, endPosition, location);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A duration in milliseconds of the `baseInterval`.\r\n\t *\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic get baseDuration(): number {\r\n\t\treturn $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts min/max values.\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description (review)\r\n\t * @param min Min timestamp\r\n\t * @param max Max timestamp\r\n\t * @return Adjusted min/max step\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number): IMinMaxStep {\r\n\t\treturn { min: min, max: max, step: this.baseDuration };\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the minimum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMin(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet startTime = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet startTime = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param index [description]\r\n\t * @param duration [description]\r\n\t * @param gridCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number): ITimeInterval {\r\n\t\tlet gridIntervals: List = this.gridIntervals;\r\n\r\n\t\tlet gridInterval: ITimeInterval = gridIntervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = gridIntervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...gridIntervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index - 1) };\r\n\t\t}\r\n\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param date Date\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param date Date or a timestamp\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param date Date\r\n\t * @return IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param value Value\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack ID\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param key [description]\r\n\t * @param location [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\r\n\t\tif (series._baseInterval[this.uid]) {\r\n\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._baseInterval) {\r\n\t\t\t\tseries._baseInterval[this.uid] = this._baseInterval;\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * @param timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tif (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n\t\t\tthis._baseInterval = timeInterval;\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position\r\n\t * @return Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tif ($type.hasValue(this.tooltipDateFormat)) {\r\n\t\t\ttext = this.dateFormatter.format(date, this.tooltipDateFormat);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n\t\t\tif (dateFormat) {\r\n\t\t\t\ttext = this.dateFormatter.format(date, dateFormat);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = this.getPositionLabel(position);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.adapter.apply(\"getTooltipText\", text);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Source position\r\n\t * @param location Location in the cell\r\n\t * @return Adjusted position\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet baseInterval = this.baseInterval;\r\n\t\tlet timeUnit = baseInterval.timeUnit;\r\n\t\tlet count = baseInterval.count;\r\n\r\n\t\tlet date: Date = this.positionToDate(position);\r\n\r\n\t\t$time.round(date, timeUnit, count);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * If `findNearest` (third parameter) is set to `true`, the method will try\r\n\t * to locate nearest available data item if none is found directly under\r\n\t * `position`.\r\n\t *\r\n\t * @param series Series\r\n\t * @param position Position (px)\r\n\t * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n\t * @return Data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tlet value: number = this.positionToValue(position);\r\n\t\tlet date: Date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\tlet dataItem = dataItemsByAxis.getKey(date.getTime().toString());\r\n\r\n\t\t// todo: alternatively we can find closiest here\r\n\t\tif (!dataItem && findNearest) {\r\n\t\t\t/*\r\n\t\t\t// to the left\r\n\t\t\tlet leftCount = 0;\r\n\t\t\tlet leftDataItem: XYSeriesDataItem;\r\n\t\t\tlet leftDate = new Date(date.getTime());\r\n\r\n\t\t\twhile (leftDate.getTime() > this.minZoomed) {\r\n\t\t\t\tleftDate = $time.add(leftDate, this.baseInterval.timeUnit, -this.baseInterval.count);\r\n\t\t\t\tleftDataItem = dataItemsByAxis.getKey(leftDate.getTime().toString());\r\n\t\t\t\tif (leftDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tleftCount++;\r\n\t\t\t\tif (leftCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet rightCount = 0;\r\n\t\t\tlet rightDataItem: XYSeriesDataItem;\r\n\t\t\tlet rightDate = new Date(date.getTime());\r\n\t\t\twhile (rightDate.getTime() < this.maxZoomed) {\r\n\t\t\t\trightDate = $time.add(rightDate, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\trightDataItem = dataItemsByAxis.getKey(rightDate.getTime().toString());\r\n\t\t\t\tif (rightDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\trightCount++;\r\n\t\t\t\tif (rightCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (leftDataItem && !rightDataItem) {\r\n\t\t\t\treturn leftDataItem;\r\n\t\t\t}\r\n\t\t\telse if (!leftDataItem && rightDataItem) {\r\n\t\t\t\treturn rightDataItem;\r\n\t\t\t}\r\n\t\t\telse if (leftDataItem && rightDataItem) {\r\n\t\t\t\tif (leftCount < rightCount) {\r\n\t\t\t\t\treturn leftDataItem;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn rightDataItem;\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t\tlet key: \"dateX\" | \"dateY\";\r\n\r\n\t\t\tif (this.axisLetter == \"Y\") {\r\n\t\t\t\tkey = \"dateY\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tkey = \"dateX\";\r\n\t\t\t}\r\n\r\n\t\t\tdataItem = series.dataItems.getIndex(series.dataItems.findClosestIndex(date.getTime(), (x) => x[key].getTime(), \"any\"));\r\n\t\t}\r\n\r\n\t\treturn dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a formatted date based on position in axis scale.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @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\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\t// @todo Better format recognition\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this.dateFormatter.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param startDate Start date\r\n\t * @param endValue End date\r\n\t * @param skipRangeEvent Do not invoke events\r\n\t * @param instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean): void {\r\n\t\tstartDate = this.dateFormatter.parse(startDate);\r\n\t\tendDate = this.dateFormatter.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param field Field name\r\n\t * @return Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tif (source[\"_baseInterval\"]) {\r\n\t\t\tthis.baseInterval = source.baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @param local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\t\tif (this.snapTooltip) {\r\n\t\t\tlet actualDate = $time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1);\r\n\r\n\t\t\tlet actualTime = actualDate.getTime();\r\n\t\t\tlet closestDate: Date;\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\r\n\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!closestDate) {\r\n\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tif (closestDate) {\r\n\t\t\t\tlet closestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = $time.round(new Date(closestTime), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\tclosestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration / 2);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\r\n\t\t\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\r\n\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).getKey(closestTime.toString());\r\n\t\t\t\t\tlet point = series.showTooltipAtDataItem(dataItem);\r\n\t\t\t\t\tif (point) {\r\n\t\t\t\t\t\tseriesPoints.push({ series: series, point: point });\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\tthis.chart.sortSeriesTooltips(seriesPoints);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Current grid interval.\r\n\t * \r\n\t * @return Grid interval\r\n\t */\r\n\tpublic get gridInterval(): ITimeInterval {\r\n\t\treturn this._gridInterval;\r\n\t}\r\n\r\n}\r\n\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[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxis.ts","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { AxisBreak, IAxisBreakProperties, IAxisBreakAdapters, IAxisBreakEvents } from \"./AxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakProperties extends IAxisBreakProperties {\r\n\r\n\t/**\r\n\t * Category break starts on.\r\n\t */\r\n\tstartCategory?: string;\r\n\r\n\t/**\r\n\t * Category break ends on.\r\n\t */\r\n\tendCategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakEvents extends IAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CategoryAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisBreakAdapters extends IAxisBreakAdapters, ICategoryAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Base class to define \"breaks\" in axes\r\n * @see {@link ICategoryAxisBreakEvents} for a list of available events\r\n * @see {@link ICategoryAxisBreakAdapters} for a list of available Adapters\r\n */\r\nexport class CategoryAxisBreak extends AxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t */\r\n\tpublic _axisType: CategoryAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's start.\r\n\t *\r\n\t * @return Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get startPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedStartValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's end.\r\n\t *\r\n\t * @return Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get endPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedEndValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A category break starts on.\r\n\t *\r\n\t * @param value Start category\r\n\t */\r\n\tpublic set startCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"startCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start category\r\n\t */\r\n\tpublic get startCategory(): string {\r\n\t\treturn this.getPropertyValue(\"startCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * A category break ends on.\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"endCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.getPropertyValue(\"endCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * An index of start category.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set startValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"startValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get startValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"startCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"startValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * An index of end category or a end value.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set endValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"endValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get endValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"endCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"endValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\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[\"CategoryAxisBreak\"] = CategoryAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","/**\r\n * Category axis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisItemLocation, AxisDataItem, IAxisProperties, IAxisDataFields, IAxisAdapters, IAxisEvents, IAxisDataItemAdapters } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { SerialChart } from \"../types/SerialChart\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport { IDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Adapter } from \"../../core/utils/Adapter\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CategoryAxisDataItem extends AxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t */\r\n\tpublic adapter = new Adapter(this);\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tthis.setProperty(\"category\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this.adapter.isEnabled(\"category\")) {\r\n\t\t\treturn this.adapter.apply(\"category\", this.properties[\"category\"]);\r\n\t\t}\r\n\t\treturn this.properties[\"category\"];\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties[\"endCategory\"];\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet firstSeriesDataItem: XYSeriesDataItem;\r\n\t\t\t\tlet lastSeriesDataItem: XYSeriesDataItem;\r\n\t\t\t\t\r\n\t\t\t\tlet startIndex = this.positionToIndex(this.start);\r\n\t\t\t\tlet endIndex = this.positionToIndex(this.end);\r\n\r\n\t\t\t\tfor(let i = startIndex; i <= endIndex; i++){\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif(dataItem){\r\n\t\t\t\t\t\tlet fdi = this.getFirstSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(fdi){\r\n\t\t\t\t\t\t\tif (!firstSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (firstSeriesDataItem && fdi.index < firstSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet ldi = this.getLastSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(ldi){\r\n\t\t\t\t\t\t\tif (!lastSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (lastSeriesDataItem && ldi.index > lastSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (firstSeriesDataItem) {\r\n\t\t\t\t\tseries.startIndex = firstSeriesDataItem.index;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.start = this.start;\r\n\t\t\t\t}\r\n\t\t\t\tif (lastSeriesDataItem) {\r\n\t\t\t\t\tseries.endIndex = lastSeriesDataItem.index + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.end = this.end;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// range might not change, but axis breaks might.\r\n\t\t\t\tif (this.axisBreaks.length > 0) {\r\n\t\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the whole axis. Causes it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tlet dataCount: number = this.dataItems.length;\r\n\r\n\t\tlet startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n\t\tlet endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n\r\n\t\tif (this.renderer.invalid) {\r\n\t\t\tthis.renderer.validate();\r\n\t\t}\r\n\r\n\t\t// find frequency at which we'll show items\r\n\t\tlet maxCount: number = this.renderer.axisLength / this.renderer.minGridDistance;\r\n\t\tlet frequency: number = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n\r\n\t\tthis._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n\t\tthis._endIndex = Math.ceil(this.end * dataCount);\r\n\r\n\t\tthis.fixAxisBreaks();\r\n\r\n\t\tif (this._startIndex == this._endIndex) {\r\n\t\t\tthis._endIndex++;\r\n\t\t}\r\n\r\n\t\tthis._frequency = frequency;\r\n\r\n\t\tif (this.axisLength <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.maxZoomFactor = this.dataItems.length;\r\n\t\tif (this.dataItems.length <= 0) {\r\n\t\t\tthis.maxZoomFactor = 1;\r\n\t\t}\r\n\r\n\t\tthis.resetIterators();\r\n\r\n\t\t// it's important to use protected variables here, as getters will return 0 - length\r\n\t\t// TODO use iterator instead\r\n\t\t// @ todo: not solved cat axis item fading\r\n\t\tstartIndex = $math.max(0, this._startIndex - this._frequency);\r\n\t\tendIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n\r\n\t\tlet itemIndex = 0;\r\n\r\n\t\tfor (let i = 0; i < startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (i < this.dataItems.length) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (i / this._frequency == Math.round(i / this._frequency)) {\r\n\t\t\t\t\tlet axisBreak: CategoryAxisBreak = this.isInBreak(i);\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t//previously we disabled all before, but this is better for cpu\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex); // helps to solve shrinking\r\n\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.appendDataItem(this._lastDataItem);\r\n\t\tthis.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\tlet adjustedStartValue: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet adjustedEndValue: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: this._startIndex, end: this._endIndex })) {\r\n\r\n\t\t\t\tlet frequency: number = $math.fitToRange(Math.ceil(this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n\t\t\t\tlet itemIndex = 0;\r\n\t\t\t\t// TODO use iterator instead\r\n\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency) {\r\n\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(b);\r\n\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.validateBreaks();\r\n\t\tthis.validateAxisRanges();\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\r\n\t\tdataItem.point = renderer.positionToPoint(position);\r\n\r\n\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\tif (tick && !tick.disabled) {\r\n\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t}\r\n\r\n\t\tlet grid: Grid = dataItem.grid;\r\n\t\tif (grid && !grid.disabled) {\r\n\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet label: AxisLabel = dataItem.label;\r\n\t\tif (label && !label.disabled) {\r\n\t\t\t// theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" wont' work, which is not intuitive.\r\n\t\t\tif (!dataItem.isRange || label.text == undefined) {\r\n\t\t\t\tdataItem.text = dataItem.text;\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateLabelElement(label, position, endPosition);\r\n\r\n\t\t\tif (dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\r\n\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t * @param dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\t// creat a collection for fast access\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t// check if such category already exists\r\n\t\tlet existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\tif (existingDataItem && existingDataItem != dataItem) {\r\n\t\t\tthis.dataItems.remove(existingDataItem);\r\n\t\t}\r\n\r\n\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param index Index\r\n\t * @param location Location (0-1)\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif (index < startIndex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t// value to the right of break end\r\n\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// value to the left of break start\r\n\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn $math.round((index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param category Category\r\n\t * @return Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem.index;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param startCategory Start category\r\n\t * @param endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param start [description]\r\n\t * @param end [description]\r\n\t * @param startLocation [description]\r\n\t * @param endLocation [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param position Source position (px)\r\n\t * @param location Location within category (0-1)\r\n\t * @return Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns first series data item with specific category\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\t \r\n\t */\r\n\tpublic getFirstSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\t\tfor (let i = 0; i < series.dataItems.length; i++) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns last series data item with specific category.\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\t\t \r\n\t */\r\n\tpublic getLastSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\r\n\t\tfor (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a data item from Series that corresponds to a specific absolute\r\n\t * position on the Axis.\r\n\t *\r\n\t * @param series Target series\r\n\t * @param position Position (px)\r\n\t * @return XYSeriesDataItem data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tif ($type.isNumber(position)) {\r\n\r\n\t\t\tlet index = this.positionToIndex(position);\r\n\r\n\t\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet category = dataItem.category;\r\n\t\t\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\t\t\t\tlet seriesDataItem = series.dataItems.getIndex(index);\r\n\t\t\t\tif(seriesDataItem){\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryX == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryY == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\tif(!sdi){\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\tif(!sdi){\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t//@todo\r\n\t\t\t\tif(findNearest){\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn sdi;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack key (?)\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\treturn this.positionToAngle(this.categoryToPosition(dataItem.categories[key], location));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn this.adapter.apply(\"getTooltipText\", dataItem.category);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\t\tif (position < 0) {\r\n\t\t\tposition = 0;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet difference: number = endIndex - startIndex;\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\tlet index: number = null;\r\n\r\n\t\t// in case we have some axis breaks\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartPosition: number = axisBreak.startPosition;\r\n\t\t\tlet breakEndPosition: number = axisBreak.endPosition;\r\n\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tbreakStartIndex = $math.max(breakStartIndex, startIndex);\r\n\t\t\tbreakEndIndex = $math.min(breakEndIndex, endIndex);\r\n\r\n\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\tdifference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\r\n\t\t\t// position to the right of break end\r\n\t\t\tif (position > breakEndPosition) {\r\n\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t}\r\n\t\t\t// position to the left of break start\r\n\t\t\telse if (position < breakStartPosition) {\r\n\r\n\t\t\t}\r\n\t\t\t// value within break\r\n\t\t\telse {\r\n\t\t\t\tlet breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n\t\t\t\tindex = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = Math.floor(position * difference + startIndex);\r\n\t\t}\r\n\t\tif (index >= endIndex) {\r\n\t\t\tindex--;\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @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\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxis.ts","/**\r\n * XY series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem, ISeriesProperties, ISeriesDataFields, ISeriesAdapters, ISeriesEvents } from \"./Series\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { CalculatedValue } from \"../../core/Component\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYSeriesDataItem extends SeriesDataItem {\r\n\r\n\t/**\r\n\t * [_minX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _minX: number;\r\n\r\n\t/**\r\n\t * [_maxX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _maxX: number;\r\n\r\n\t/**\r\n\t * [_minY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _minY: number;\r\n\r\n\t/**\r\n\t * [_maxY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _maxY: number;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: XYSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYSeriesDataItem\";\r\n\r\n\t\tthis.values.valueX = { stack: 0 };\r\n\t\tthis.values.valueY = { stack: 0 };\r\n\t\tthis.values.openValueX = {};\r\n\t\tthis.values.openValueY = {};\r\n\r\n\t\tthis.values.dateX = {};\r\n\t\tthis.values.dateY = {};\r\n\t\tthis.values.openDateX = {};\r\n\t\tthis.values.openDateY = {};\r\n\r\n\t\tthis.setLocation(\"dateX\", 0.5, 0);\r\n\t\tthis.setLocation(\"dateY\", 0.5, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0.5, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0.5, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on X value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set valueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get valueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on Y value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set valueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get valueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on X date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set dateX(date: Date) {\r\n\t\tthis.setDate(\"dateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get dateX(): Date {\r\n\t\treturn this.getDate(\"dateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on Y date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set dateY(date: Date) {\r\n\t\tthis.setDate(\"dateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get dateY(): Date {\r\n\t\treturn this.getDate(\"dateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on X category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set categoryX(category: string) {\r\n\t\tthis.setCategory(\"categoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get categoryX(): string {\r\n\t\treturn this.categories.categoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on Y category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set categoryY(category: string) {\r\n\t\tthis.setCategory(\"categoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get categoryY(): string {\r\n\t\treturn this.categories.categoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on X value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set openValueX(value: number) {\r\n\t\tthis.setValue(\"openValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get openValueX(): number {\r\n\t\treturn this.values.openValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on Y value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set openValueY(value: number) {\r\n\t\tthis.setValue(\"openValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get openValueY(): number {\r\n\t\treturn this.values.openValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on X date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set openDateX(date: Date) {\r\n\t\tthis.setDate(\"openDateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get openDateX(): Date {\r\n\t\treturn this.getDate(\"openDateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on Y date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set openDateY(date: Date) {\r\n\t\tthis.setDate(\"openDateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get openDateY(): Date {\r\n\t\treturn this.getDate(\"openDateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on X category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set openCategoryX(category: string) {\r\n\t\tthis.setProperty(\"openCategoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryX(): string {\r\n\t\treturn this.categories.openCategoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on Y category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set openCategoryY(category: string) {\r\n\t\tthis.setProperty(\"openCategoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryY(): string {\r\n\t\treturn this.categories.openCategoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Return smallest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMin(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet min: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value < min || !$type.isNumber(min)) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn min;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Return biggest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMax(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet max: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value > max || !$type.isNumber(max)) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn max;\r\n\t\t//}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Defines property set for a [[XYSeries]] tooltip event that contains information about dataItem\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t */\r\n\tdataItem: XYSeriesDataItem;\r\n};\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for horizontal axis.\r\n\t */\r\n\tvalueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for vertical axis.\r\n\t */\r\n\tvalueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for horizontal axis.\r\n\t */\r\n\tcategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for vertical axis.\r\n\t */\r\n\tcategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for horizontal axis.\r\n\t */\r\n\tdateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for vertical axis.\r\n\t */\r\n\tdateY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for horizontal\r\n\t * axis.\r\n\t */\r\n\topenValueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for vertical\r\n\t * axis.\r\n\t */\r\n\topenValueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for horizontal axis.\r\n\t */\r\n\topenCategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for vertical axis.\r\n\t */\r\n\topenCategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for horizontal axis.\r\n\t */\r\n\topenDateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for vertical axis.\r\n\t */\r\n\topenDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tstacked?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the current cursor position\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t */\r\n\tcursorTooltipEnabled?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesEvents extends ISeriesEvents {\r\n\t/**\r\n\t * Invoked when series tooltip was shown on some particular data item\r\n\t */\r\n\ttooltipshownat: XYSeriesTooltipEvent;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[XYSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYSeriesAdapters extends ISeriesAdapters, IXYSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class XYSeries extends Series {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t */\r\n\tprotected _baseAxis: Axis;\r\n\r\n\t/**\r\n\t * Total data item count.\r\n\t */\r\n\tprotected _count: Dictionary;\r\n\r\n\t/**\r\n\t * Data item count in current selection.\r\n\t */\r\n\tprotected _scount: Dictionary;\r\n\r\n\t/**\r\n\t * [_xField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xField: string;\r\n\r\n\t/**\r\n\t * [_yField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yField: string;\r\n\r\n\t/**\r\n\t * [_xOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xOpenField: string;\r\n\r\n\t/**\r\n\t * [_yOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yOpenField: string;\r\n\r\n\t/**\r\n\t * [_tooltipXField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipXField: string;\r\n\r\n\t/**\r\n\t * [_tooltipYField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipYField: string;\r\n\r\n\t/**\r\n\t * [_xValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xValueFields: Array = [];\r\n\r\n\t/**\r\n\t * [_yValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yValueFields: Array = [];\r\n\r\n\t/**\r\n\t * Series which is stacked on top of this series, if any.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic stackedSeries: XYSeries;\r\n\r\n\r\n\t/**\r\n\t * dataitem of previously shown tooltip, used to avoid multiple tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _baseInterval:{[index:string]:ITimeInterval} = {};\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYSeries\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.cursorTooltipEnabled = true;\r\n\r\n\t\tthis.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\r\n\t\ttry {\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\r\n\t\t\tdataItem.events.disable();\r\n\t\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\r\n\t\t\tdataItem.events.enable();\r\n\r\n\t\t\tthis.setInitialWorkingValues(dataItem);\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis._chart.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tif (this.xAxis) {\r\n\t\t\tlet dataItemsX = this.dataItemsByAxis.getKey(this.xAxis.uid);\r\n\t\t\tif (dataItemsX) {\r\n\t\t\t\tdataItemsX.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.yAxis) {\r\n\t\t\tlet dataItemsY = this.dataItemsByAxis.getKey(this.yAxis.uid);\r\n\t\t\tif (dataItemsY) {\r\n\t\t\t\tdataItemsY.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\tlet xAxisFieldName: string = xAxis.axisFieldName;\r\n\t\tlet xField: $type.Keyof = <$type.Keyof>(xAxisFieldName + \"X\");\r\n\t\tlet xOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n\r\n\t\tlet yAxisFieldName: string = yAxis.axisFieldName;\r\n\t\tlet yField: $type.Keyof = <$type.Keyof>(yAxisFieldName + \"Y\");\r\n\t\tlet yOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n\r\n\t\tthis._xField = xField;\r\n\t\tthis._yField = yField;\r\n\r\n\t\tif (this.dataFields[xOpenField]) {\r\n\t\t\tthis._xOpenField = xOpenField;\r\n\t\t}\r\n\r\n\t\tif (this.dataFields[yOpenField]) {\r\n\t\t\tthis._yOpenField = yOpenField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[yOpenField] && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[xOpenField] && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\t\t\tif (!this._yOpenField) {\r\n\t\t\t\tthis._yOpenField = yField;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._xValueFields = [];\r\n\t\tthis._yValueFields = [];\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xOpenField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yOpenField);\r\n\t}\r\n\r\n\t/**\r\n\t * [axis description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param axis Axis\r\n\t * @param fields Fields (?)\r\n\t * @param field Field\r\n\t */\r\n\tprotected addValueField(axis: Axis, fields: Array, field: Key): void {\r\n\t\tif (axis instanceof ValueAxis) {\r\n\t\t\tif ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n\t\t\t\tfields.push(field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets category field from the category axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setCategoryAxisField(field: Key, axis: CategoryAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets date field from the date axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setDateAxisField(field: Key, axis: DateAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.date;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs after-draw tasks, e.g. creates masks.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.createMask();\r\n\t}\r\n\r\n\t/**\r\n\t * Create a mask for the series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic createMask(): void {\r\n\t\t// this mask from which we cut out ranges. does not work well if ranges overlap.\r\n\t\tif (this.mainContainer.mask) {\r\n\t\t\tlet path: string = this.getMaskPath();\r\n\r\n\t\t\t// @todo: this approach won't work well on circluar or other non x/y axes\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\t\tif (range.axisFill.fillPath) {\r\n\t\t\t\t\trange.axisFill.validate();\r\n\t\t\t\t\tpath += range.axisFill.fillPath;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.mainContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\treturn $path.rectToPath({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: this.xAxis.axisLength,\r\n\t\t\theight: this.yAxis.axisLength\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns axis data field to use.\r\n\t *\r\n\t * @param axis Axis\r\n\t * @return Field name\r\n\t */\r\n\tpublic getAxisField(axis: Axis): string {\r\n\t\tif (axis == this.xAxis) {\r\n\t\t\treturn this.xField;\r\n\t\t}\r\n\t\tif (axis == this.yAxis) {\r\n\t\t\treturn this.yField;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\r\n\t\t// this helps date axis to check which baseInterval we should use\r\n\t\tthis.xAxis.updateAxisBySeries();\r\n\t\tthis.yAxis.updateAxisBySeries();\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.xAxis.postProcessSeriesDataItems();\r\n\t\tthis.yAxis.postProcessSeriesDataItems();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataRange() {\r\n\t\tif (this.xAxis.dataRangeInvalid) {\r\n\t\t\tthis.xAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.dataRangeInvalid) {\r\n\t\t\tthis.yAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tsuper.validateDataRange();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.xAxis.invalid) {\r\n\t\t\tthis.xAxis.validate();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.invalid) {\r\n\t\t\tthis.yAxis.validate();\r\n\t\t}\r\n\r\n\t\tthis.y = this.yAxis.pixelY;\r\n\t\tthis.x = this.xAxis.pixelX;\r\n\r\n\r\n\t\tthis._showBullets = true;\r\n\t\tlet minBulletDistance: number = this.minBulletDistance;\r\n\t\tif ($type.isNumber(minBulletDistance)) {\r\n\t\t\tif (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n\t\t\t\tthis._showBullets = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._xAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._xAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._xAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._xAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.xAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no X axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xAxis = axis;\r\n\t\t\t}\r\n\t\t\treturn this._xAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._yAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._yAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._yAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._yAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.yAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no Y axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.yAxis = axis;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._yAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @param value Axis\r\n\t */\r\n\tpublic set baseAxis(value: Axis) {\r\n\t\tif (this._baseAxis != value) {\r\n\t\t\tthis._baseAxis = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get baseAxis(): Axis {\r\n\t\tif (!this._baseAxis) {\r\n\t\t\tif (this.yAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._baseAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._baseAxis;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes values after data items' were added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItems Data items\r\n\t */\r\n\tpublic processValues(working: boolean): void {\r\n\t\t// todo: if this is stacked, ensure that series to which this one can be stacked are processed before.\r\n\t\tsuper.processValues(working);\r\n\r\n\t\tlet dataItems = this.dataItems;\r\n\r\n\t\tlet minX = Infinity;\r\n\t\tlet maxX = - Infinity;\r\n\r\n\t\tlet minY = Infinity;\r\n\t\tlet maxY = - Infinity;\r\n\r\n\t\tlet startIndex = this.startIndex;\r\n\t\tlet endIndex = this.endIndex;\r\n\r\n\t\tif (!working) {\r\n\t\t\tstartIndex = 0;\r\n\t\t\tendIndex = this.dataItems.length;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tthis.getStackValue(dataItem, working);\r\n\r\n\t\t\tlet stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n\t\t\tlet stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n\r\n\t\t\tminX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n\t\t\tminY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n\r\n\t\t\tmaxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n\t\t\tmaxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n\r\n\t\t\t// if it's stacked, pay attention to stack value\r\n\t\t\tif (this.stacked) {\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared || this.start != 0 || this.end != 1) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip() {\r\n\t\tsuper.hideTooltip();\r\n\t\tthis.returnBulletDefaultState();\r\n\t\tthis._prevTooltipDataItem = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific position.\r\n\t *\r\n\t * @param xPosition X\r\n\t * @param yPosition Y\r\n\t */\r\n\tpublic showTooltipAtPosition(xPosition: number, yPosition: number): IPoint {\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\t\tif (this.visible && !this.isHiding && !this.isShowing) {\r\n\r\n\t\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\t\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet point = this.showTooltipAtDataItem(dataItem);\r\n\r\n\t\t\t\tif(point){\r\n\t\t\t\t\treturn point;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\t\tif (!this.tooltipText) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideTooltip();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific dataItem.\r\n\t *\r\n\t * @param dataItem\r\n\t */\r\n\tpublic showTooltipAtDataItem(dataItem: this[\"_dataItem\"]): IPoint {\r\n\t\tthis.returnBulletDefaultState(dataItem);\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tif (dataItem && dataItem.visible) {\r\n\r\n\t\t\t\tthis.updateLegendValue(dataItem);\r\n\t\t\t\tthis.tooltipDataItem = dataItem;\r\n\r\n\t\t\t\t// todo: add tooltipXField and tooltipYField.\r\n\t\t\t\tlet tooltipXField = this.tooltipXField;\r\n\t\t\t\tlet tooltipYField = this.tooltipYField;\r\n\r\n\t\t\t\tif ($type.hasValue((dataItem)[tooltipXField]) && $type.hasValue((dataItem)[tooltipYField])) {\r\n\r\n\t\t\t\t\tlet tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, dataItem.locations[tooltipXField], dataItem.locations[tooltipYField]);\r\n\r\n\t\t\t\t\tif (tooltipPoint) {\r\n\r\n\t\t\t\t\t\tthis.tooltipX = tooltipPoint.x;\r\n\t\t\t\t\t\tthis.tooltipY = tooltipPoint.y;\r\n\r\n\t\t\t\t\t\tif (this._prevTooltipDataItem != dataItem) {\r\n\t\t\t\t\t\t\tthis.dispatchImmediately(\"tooltipshownat\", {\r\n\t\t\t\t\t\t\t\ttype: \"tooltipshownat\",\r\n\t\t\t\t\t\t\t\ttarget: this,\r\n\t\t\t\t\t\t\t\tdataItem: dataItem\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (let a of dataItem.bullets) {\r\n\t\t\t\t\t\t\tlet bullet = a[1]\r\n\t\t\t\t\t\t\tbullet.isHover = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this.showTooltip()) {\r\n\t\t\t\t\t\t\treturn $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * returns default state to bullets when tooltip is shown at some other data item or hidden\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected returnBulletDefaultState(dataItem?: XYSeriesDataItem) {\r\n\t\tif (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n\t\t\tfor (let a of this._prevTooltipDataItem.bullets) {\r\n\t\t\t\tlet bullet = a[1];\r\n\t\t\t\tif (!bullet.isDisposed()) {\r\n\t\t\t\t\tbullet.isHover = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._prevTooltipDataItem = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet) {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: XYSeriesDataItem = bullet.dataItem;\r\n\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bullet.xField;\r\n\t\tif (!$type.hasValue(xField)) {\r\n\t\t\txField = this.xField;\r\n\t\t}\r\n\r\n\t\tlet yField: string = bullet.yField;\r\n\t\tif (!$type.hasValue(yField)) {\r\n\t\t\tyField = this.yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\r\n\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\tif (point) {\r\n\t\t\t\tlet x: number = point.x;\r\n\t\t\t\tlet y: number = point.y;\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationX) && this.xOpenField != this.xField) {\r\n\t\t\t\t\tlet openX: number = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\t\tx = x - (x - openX) * bullet.locationX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationY) && this.yOpenField != this.yField) {\r\n\t\t\t\t\tlet openY: number = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\t\ty = y - (y - openY) * bullet.locationY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbullet.moveTo({ x: x, y: y });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationX;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationY;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @param stacked Can be stacked?\r\n\t */\r\n\tpublic set stacked(stacked: boolean) {\r\n\t\tthis.setPropertyValue(\"stacked\", stacked, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Can be stacked?\r\n\t */\r\n\tpublic get stacked(): boolean {\r\n\t\treturn this.getPropertyValue(\"stacked\");\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position?\r\n\t *\r\n\t * @default false\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param duration Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axis ranges\r\n\t\t\tif ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n\t\t\t\tfor (let i = 0, len = config.axisRanges.length; i < len; i++) {\r\n\t\t\t\t\tlet range = config.axisRanges[i];\r\n\t\t\t\t\tif (!$type.hasValue(range.type)) {\r\n\t\t\t\t\t\trange.type = \"AxisDataItem\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.axis);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Parse date fields based on the series fields\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tthis.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tlet x: number = this.xAxis.getX(dataItem, xKey, locationX);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY);\r\n\r\n\t\tx = $math.fitToRange(x, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t *\r\n\t * If set to `true` (default), the tooltips set for all series item's\r\n\t * elements like columns and bullets will be automatically shown\r\n\t * when [[XYCursor]] passes over category/date, even if its not hovered\r\n\t * directly over the item.\r\n\t *\r\n\t * Set this to `false` to disable such behavior and display item-specific\r\n\t * tooltips only when hovered directly over them\r\n\t *\r\n\t * @default true\r\n\t * @param value Display tooltip?\r\n\t */\r\n\tpublic set cursorTooltipEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Display tooltip?\r\n\t */\r\n\tpublic get cursorTooltipEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorTooltipEnabled\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/XYSeries.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { getInteraction, IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IInteractionObjectEvents } from \"../../core/interaction/InteractionObjectEvents\";\r\nimport { IPoint, } from \"../../core/defs/IPoint\";\r\nimport { Chart } from \"../Chart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Cursor]].\r\n */\r\nexport interface ICursorProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Cursor]].\r\n */\r\nexport interface ICursorEvents extends IContainerEvents {\r\n\r\n\t/**\r\n\t * Invoked when position of cursor changes.\r\n\t */\r\n\tcursorpositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts selecting a range with a cursor, e.g. presses\r\n\t * down mouse button and drags the cursor.\r\n\t */\r\n\tselectstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when selection has ended, e.g. user releases mouse button.\r\n\t */\r\n\tselectended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts zooming using cursor.\r\n\t */\r\n\tzoomstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user clicked to start zooming/panning/selecting but haven't\r\n\t * finished the operation.\r\n\t */\r\n\tbehaviorcanceled: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done zooming using cursor.\r\n\t */\r\n\tzoomended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts panning using cursor.\r\n\t */\r\n\tpanstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done panning using cursor.\r\n\t */\r\n\tpanended: {};\r\n\r\n\t/**\r\n\t * Invoked when user is panning using cursor.\r\n\t */\r\n\tpanning: {};\r\n}\r\n\r\n/**\r\n * Defines adapters for [[Cursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICursorAdapters extends IContainerAdapters, ICursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Main Cursor class with common cursor functionality.\r\n *\r\n * Chart-specific cursors must extend this class.\r\n *\r\n * @see {@link ICursorEvents} for a list of available events\r\n * @see {@link ICursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class Cursor extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICursorEvents;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection started.\r\n\t */\r\n\tpublic downPoint: IPoint;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection ended.\r\n\t */\r\n\tpublic upPoint: IPoint;\r\n\r\n\t/**\r\n\t * Current cursor position during selection.\r\n\t *\r\n\t * @todo Better description\r\n\t */\r\n\tpublic point: IPoint = { x: 0, y: 0 };\r\n\r\n\t/**\r\n\t * Relative horizontal position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic xPosition: number;\r\n\r\n\t/**\r\n\t * Relative vertical position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic yPosition: number;\r\n\r\n\t/**\r\n\t * [_usesSelection description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _usesSelection: boolean;\r\n\r\n\t/**\r\n\t * What to do when user pressed down and drags cursor: zoom or select.\r\n\t */\r\n\tprotected _generalBehavior: \"zoom\" | \"select\" | \"pan\"; // todo: draw\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: Chart;\r\n\r\n\t/**\r\n\t * Specifies the rules when cursor needs to be moved or hidden.\r\n\t */\r\n\tprotected _stick: \"hard\" | \"soft\" | \"none\" = \"none\";\r\n\r\n\t/**\r\n\t * A screen point that cursor is \"stuck\" to.\r\n\t */\r\n\tprotected _stickPoint: IPoint;\r\n\r\n\t/**\r\n\t * non-modified down point\r\n\t * @ignore\r\n\t */\r\n\tprotected _downPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * non-modified up point\r\n\t * @ignore\r\n\t */\r\n\tprotected _upPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"Cursor\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\t\tthis.shouldClone = false;\r\n\r\n\t\tthis.hide(0);\r\n\r\n\t\tthis.trackable = true;\r\n\t\tthis.clickable = true;\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// Add events on body to trigger down and up events (to start zooming or\r\n\t\t// selection)\r\n\t\tconst interaction = getInteraction();\r\n\t\tthis._disposers.push(interaction.body.events.on(\"down\", this.handleCursorDown, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"up\", this.handleCursorUp, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"track\", this.handleCursorMove, this));\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handle pointer movement in document and update cursor position as needed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleCursorMove(event: IInteractionObjectEvents[\"track\"]): IPoint {\r\n\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t * @param stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\tthis.point = point;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// hide cursor if it's out of bounds\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.show(0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// unless we are selecting (mouse is down)\r\n\t\t\t\tif (!this.downPoint) {\r\n\t\t\t\t\tthis.hide(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tswitch (this._generalBehavior) {\r\n\t\t\t\tcase \"zoom\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"zoomended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"select\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"selectended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pan\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"panended\");\r\n\t\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t\tthis.updateSelection();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\r\n\t\tif (!this.interactionsEnabled || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Get local point\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tthis._downPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis._upPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\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[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer, IDisposer } from \"../../core/utils/Disposer\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { XYSeries, IXYSeriesEvents } from \"../series/XYSeries\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { IInteractionEvents, getInteraction } from \"../../core/interaction/Interaction\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYCursor]].\r\n */\r\nexport interface IXYCursorProperties extends ICursorProperties {\r\n\r\n\t/**\r\n\t * Cursor's behavior when moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally; (default)\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * @default \"zoomX\"\r\n\t */\r\n\tbehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineX?: boolean;\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineY?: boolean;\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t */\r\n\tsnapToSeries: XYSeries;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYCursor]].\r\n */\r\nexport interface IXYCursorEvents extends ICursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYCursorAdapters extends ICursorAdapters, IXYCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\tprotected _snapToDisposer: IDisposer;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYCursor\";\r\n\r\n\t\t// Defaults\r\n\t\tthis.behavior = \"zoomX\";\r\n\r\n\t\tthis.maxPanOut = 0.1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Create selection element\r\n\t\tlet selection: Sprite = this.createChild(Sprite);\r\n\t\tselection.shouldClone = false;\r\n\t\tselection.fillOpacity = 0.2;\r\n\t\tselection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tselection.isMeasured = false;\r\n\t\tselection.interactionsEnabled = false;\r\n\t\tthis.selection = selection;\r\n\t\tthis._disposers.push(this.selection);\r\n\r\n\t\t// Create cursor's vertical line\r\n\t\tlet lineX: Sprite = this.createChild(Sprite);\r\n\t\tlineX.shouldClone = false;\r\n\t\tlineX.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineX.fill = color();\r\n\t\tlineX.strokeDasharray = \"3,3\";\r\n\t\tlineX.isMeasured = false;\r\n\t\tlineX.strokeOpacity = 0.4;\r\n\t\tlineX.interactionsEnabled = false;\r\n\t\tlineX.y = 0;// important\r\n\t\tthis.lineX = lineX;\r\n\t\tthis._disposers.push(this.lineX);\r\n\r\n\t\t// Create cursor's horizontal line\r\n\t\tlet lineY: Sprite = this.createChild(Sprite);\r\n\t\tlineY.shouldClone = false;\r\n\t\tlineY.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineY.fill = color();\r\n\t\tlineY.strokeDasharray = \"3,3\";\r\n\t\tlineY.isMeasured = false;\r\n\t\tlineY.strokeOpacity = 0.4;\r\n\t\tlineY.interactionsEnabled = false;\r\n\t\tlineY.x = 0; // important\r\n\t\tthis.lineY = lineY;\r\n\t\tthis._disposers.push(this.lineY);\r\n\r\n\t\t// Add handler for size changes\r\n\t\tthis.events.on(\"sizechanged\", this.updateSize, this, false);\r\n\r\n\t\tthis._disposers.push(this._lineX);\r\n\t\tthis._disposers.push(this._lineY);\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.mask = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tif ((this.snapToSeries && !this.snapToSeries.isHidden)) {\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.updateLinePositions(point);\r\n\t\t}\r\n\r\n\t\tif (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tthis.getPanningRanges();\r\n\t\t\t\tthis.dispatch(\"panning\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\t\tpoint = this.fixPoint(this.point);\r\n\r\n\t\tif (this.lineX && this.lineX.visible && !this.xAxis) {\r\n\t\t\tthis.lineX.x = point.x;\r\n\t\t}\r\n\t\tif (this.lineY && this.lineY.visible && !this.yAxis) {\r\n\t\t\tthis.lineY.y = point.y;\r\n\t\t}\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.downPoint = { x: point.x, y: point.y };\r\n\r\n\t\t\t\tthis.updatePoint(point);\r\n\r\n\t\t\t\t//this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n\r\n\t\t\t\tthis.point.x = this.downPoint.x;\r\n\t\t\t\tthis.point.y = this.downPoint.y;\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\t\t\t\tlet selectionX: number = this.downPoint.x;\r\n\t\t\t\tlet selectionY: number = this.downPoint.y;\r\n\r\n\t\t\t\tif (this._usesSelection) {\r\n\t\t\t\t\tselection.x = selectionX;\r\n\t\t\t\t\tselection.y = selectionY;\r\n\t\t\t\t\tselection.path = \"\";\r\n\t\t\t\t\tselection.show();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerDownReal(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.downPoint = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t\tif (this.lineX) {\r\n\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > getInteraction().getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tif (this.downPoint) {\r\n\t\t\t\tthis.upPoint = point;\r\n\r\n\t\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\t\tthis.getRanges();\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerUpReal(point);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.selection.hide(0);\r\n\t\t}\r\n\t\tthis.downPoint = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\tthis.selection;\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Behavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._xAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return X axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\treturn this._xAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to Y [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis Y axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tif (this._yAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._yAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\treturn this._yAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet x: number = point.x;\r\n\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.x = x;\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineX.x = x;\r\n\t\t\t\tlet width: number = endPoint.x - startPoint.x;\r\n\t\t\t\tthis.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when Y axis changes position or scale.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet y: number = point.y;\r\n\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.y = y;\r\n\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineY.y = y;\r\n\t\t\t\tlet height: number = endPoint.y - startPoint.y;\r\n\t\t\t\tthis.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use for X axis.\r\n\t *\r\n\t * @param lineX Line\r\n\t */\r\n\tpublic set lineX(lineX: Sprite) {\r\n\t\tif (lineX) {\r\n\t\t\tlineX.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineX.interactionsEnabled = false;\r\n\t\t\tlineX.parent = this;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineX.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineX(): Sprite {\r\n\t\treturn this._lineX.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use Y axis.\r\n\t *\r\n\t * @param lineY Line\r\n\t */\r\n\tpublic set lineY(lineY: Sprite) {\r\n\t\tif (lineY) {\r\n\t\t\tlineY.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineY.parent = this;\r\n\t\t\tlineY.interactionsEnabled = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineY.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineY(): Sprite {\r\n\t\treturn this._lineY.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A selection element ([[Sprite]]).\r\n\t *\r\n\t * @param selection Selection rectangle\r\n\t */\r\n\tpublic set selection(selection: Sprite) {\r\n\t\tthis._selection = selection;\r\n\t\tif (selection) {\r\n\t\t\tselection.element = this.paper.add(\"path\");\r\n\t\t\tselection.parent = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Selection rectangle\r\n\t */\r\n\tpublic get selection(): Sprite {\r\n\t\treturn this._selection;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n\t * with real references.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies to which series cursor lines should be snapped. Works when one\r\n\t * of the axis is `DateAxis` or `CategoryAxis`. Won't work if both axes are\r\n\t * `ValueAxis`.\r\n\t *\r\n\t * @param {XYSeries}\r\n\t */\r\n\tpublic set snapToSeries(series: XYSeries) {\r\n\t\tif (this.setPropertyValue(\"snapToSeries\", series)) {\r\n\t\t\tif (this._snapToDisposer) {\r\n\t\t\t\tthis._snapToDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (series) {\r\n\t\t\t\tthis._snapToDisposer = series.events.on(\"tooltipshownat\", this.handleSnap, this, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYSeries}\r\n\t */\r\n\tpublic get snapToSeries(): XYSeries {\r\n\t\treturn this.getPropertyValue(\"snapToSeries\");\r\n\t}\r\n\r\n\t/**\r\n\t * [handleSnap description]\r\n\t *\r\n\t * @ignore\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleSnap() {\r\n\r\n\t\tlet series = this.snapToSeries;\r\n\t\tlet y = series.tooltipY;\r\n\t\tlet x = series.tooltipX;// - this.pixelWidth;\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tif (this.xAxis.renderer.opposite) {\r\n\t\t\t\ty -= this.pixelHeight;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.point = { x: x, y: y };\r\n\t\tthis.getPositions();\r\n\r\n\t\tx -= this.pixelWidth;\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tif (this.yAxis.renderer.opposite) {\r\n\t\t\t\tx += this.pixelWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet tooltip = series.tooltip;\r\n\t\tlet duration = tooltip.animationDuration;\r\n\t\tlet easing = tooltip.animationEasing;\r\n\r\n\t\tif (series.baseAxis == series.xAxis) {\r\n\t\t\tseries.yAxis.showTooltipAtPosition(this.yPosition);\r\n\t\t}\r\n\r\n\t\tif (series.baseAxis == series.yAxis) {\r\n\t\t\tseries.xAxis.showTooltipAtPosition(this.xPosition);\r\n\t\t}\r\n\r\n\t\tthis.lineX.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\tthis.lineY.animate([{ property: \"x\", to: x }], duration, easing);\r\n\r\n\t\tif (!this.xAxis) {\r\n\t\t\tthis.lineX.animate([{ property: \"x\", to: x }], duration, easing);\r\n\t\t}\r\n\t\tif (!this.yAxis) {\r\n\t\t\tthis.lineY.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\t}\r\n\t}\r\n}\r\n\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[\"XYCursor\"] = XYCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/XYCursor.ts","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar, IScrollbarProperties, IScrollbarAdapters, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarProperties extends IScrollbarProperties { }\r\n\r\n/**\r\n * Defines events for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarEvents extends IScrollbarEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChartScrollbar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartScrollbarAdapters extends IScrollbarAdapters, IXYChartScrollbarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A special version of the Scrollbar that has an XY chart in it.\r\n *\r\n * Used mainly as an advanced scrollbar with a preview for other XY charts.\r\n *\r\n * However, can be used as standalone element.\r\n *\r\n * @see {@link IXYChartScrollbarEvents} for a list of available events\r\n * @see {@link IXYChartScrollbarAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class XYChartScrollbar extends Scrollbar {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChartScrollbarEvents;\r\n\r\n\t/**\r\n\t * An [[XYSeries]] used to draw a graph on the Scrollbar.\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * A chart element Scrollbar is for.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart instance that shows mini-chart within Scrollbar.\r\n\t */\r\n\tprotected _scrollbarChart: XYChart;\r\n\r\n\t/**\r\n\t * [_unselectedOverlay description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _unselectedOverlay: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartScrollbar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\tlet scrollbarChart: XYChart = this.createChild(XYChart);\r\n\t\tscrollbarChart.shouldClone = false;\r\n\t\tscrollbarChart.margin(0, 0, 0, 0);\r\n\t\tscrollbarChart.padding(0, 0, 0, 0);\r\n\t\tscrollbarChart.interactionsEnabled = false;\r\n\r\n\t\tthis._scrollbarChart = scrollbarChart;\r\n\t\tthis._disposers.push(this._scrollbarChart);\r\n\r\n\t\tthis.minHeight = 60;\r\n\t\tthis.minWidth = 60;\r\n\r\n\t\tlet unselectedOverlay: Sprite = this.createChild(Sprite);\r\n\t\tunselectedOverlay.shouldClone = false;\r\n\t\tunselectedOverlay.setElement(this.paper.add(\"path\"));\r\n\t\tunselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n\t\tunselectedOverlay.fillOpacity = 0.8;\r\n\t\tunselectedOverlay.interactionsEnabled = false;\r\n\t\tunselectedOverlay.isMeasured = false;\r\n\t\tunselectedOverlay.toBack();\r\n\t\tthis._unselectedOverlay = unselectedOverlay;\r\n\t\tthis._disposers.push(this._unselectedOverlay);\r\n\r\n\t\tscrollbarChart.toBack();\r\n\r\n\t\tthis.background.cornerRadius(0, 0, 0, 0);\r\n\r\n\t\tlet thumbBackground = this.thumb.background;\r\n\t\tthumbBackground.cornerRadius(0, 0, 0, 0);\r\n\t\tthumbBackground.fillOpacity = 0;\r\n\t\tthumbBackground.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\tlet hoverState = thumbBackground.states.getKey(\"hover\");\r\n\t\tif (hoverState) {\r\n\t\t\thoverState.properties.fillOpacity = 0.2;\r\n\t\t}\r\n\r\n\t\tlet downState = thumbBackground.states.getKey(\"down\");\r\n\t\tif (downState) {\r\n\t\t\tdownState.properties.fillOpacity = 0.4;\r\n\t\t}\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of series that are used to draw graph(s) on the scrollbar.\r\n\t *\r\n\t * @readonly\r\n\t * @return Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n\t\t\tthis._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.newValue;\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\tscrollbarChart.zoomOutButton.disabled = true;\r\n\r\n\t\tthis.chart = sourceSeries.chart;\r\n\r\n\t\tlet addXAxis: boolean = true;\r\n\t\tlet addYAxis: boolean = true;\r\n\r\n\t\t// check if we haven't added clone of x or y axis before\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series != sourceSeries) {\r\n\t\t\t\tif (series.xAxis == sourceSeries.xAxis) {\r\n\t\t\t\t\taddXAxis = false;\r\n\t\t\t\t}\r\n\t\t\t\tif (series.yAxis == sourceSeries.yAxis) {\r\n\t\t\t\t\taddYAxis = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet series: XYSeries = sourceSeries.clone();\r\n\r\n\t\tif (addXAxis) {\r\n\r\n\t\t\tlet xAxis = sourceSeries.xAxis.clone();\r\n\t\t\tscrollbarChart.xAxes.moveValue(xAxis);\r\n\t\t\txAxis.title.disabled = true;\r\n\t\t\txAxis.rangeChangeDuration = 0;\r\n\t\t\txAxis.id = sourceSeries.uid;\r\n\t\t\txAxis.title.disabled = true;\r\n\r\n\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.yAxis = yAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\tif (this._scrollbarChart) {\r\n\t\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\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[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Scrollbar, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { XYCursor, IXYCursorEvents } from \"../cursors/XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IDisposer, MultiDisposer, MutableValueDisposer, Disposer } from \"../../core/utils/Disposer\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\n\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: XYChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart]].\r\n */\r\nexport interface IXYChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[XYChart]].\r\n */\r\nexport interface IXYChartProperties extends ISerialChartProperties {\r\n\r\n\t/**\r\n\t * A container that is used as a maske for bullets so that they can't\r\n\t * \"spill\" outside of the plot area.\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t *\r\n\t * @default \"none\"\r\n\t */\r\n\tmouseWheelBehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Specifies if chart should arrange series tooltips so that they won't\r\n\t * overlap.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tarrangeTooltips?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart]].\r\n */\r\nexport interface IXYChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartAdapters extends ISerialChartAdapters, IXYChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates an XY chart, and any derivative chart, like Serial, Date-based, etc.\r\n *\r\n * Basically this is a chart type, that is used to display any chart\r\n * information in a square plot area.\r\n *\r\n * The horizontal and vertical scale is determined by the type of Axis.\r\n *\r\n * The plot types are determined by type of Series.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * let series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"XYChart\");\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * var series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Category axis\r\n * \t\"xAxes\": [{\r\n * \t\t\"type\": \"CategoryAxis\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Value axis\r\n * \t\"yAxes\": [{\r\n * \t\t\"type\": \"ValueAxis\"\r\n * \t}],\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"ColumnSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"categoryX\": \"country\",\r\n * \t\t\t\"valueY\": \"visits\"\r\n * \t\t},\r\n * \t\t\"name\": \"Web Traffic\"\r\n * \t}],\r\n *\r\n * \t// Cursor\r\n * \t\"cursor\": {},\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"USA\",\r\n * \t\t\"visits\": 3025\r\n * \t}, {\r\n * \t\t\"country\": \"China\",\r\n * \t\t\"visits\": 1882\r\n * \t}, {\r\n * \t\t\"country\": \"Japan\",\r\n * \t\t\"visits\": 1809\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"XYChart\");\r\n * ```\r\n *\r\n *\r\n * @see {@link IXYChartEvents} for a list of available Events\r\n * @see {@link IXYChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: XYSeries;\r\n\r\n\t/**\r\n\t * A list of horizontal axes.\r\n\t */\r\n\tprotected _xAxes: List>;\r\n\r\n\t/**\r\n\t * A list of vertical axes.\r\n\t */\r\n\tprotected _yAxes: List>;\r\n\r\n\t/**\r\n\t * A container that holds vertical axes and plot area.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic yAxesAndPlotContainer: Container\r\n\r\n\t/**\r\n\t * A container that holds top axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic topAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds bottom axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic bottomAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds left axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic leftAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds right axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic rightAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container for plot area.\r\n\t *\r\n\t * @type {Container}\t \r\n\t */\r\n\tpublic plotContainer: Container;\r\n\r\n\t/**\r\n\t * A reference to horizontal [[Scrollbar]].\r\n\t */\r\n\tprotected _scrollbarX: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to vertical [[Scrollbar]].\r\n\t */\r\n\tprotected _scrollbarY: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to chart's cursor.\r\n\t */\r\n\tpublic _cursor: XYCursor;\r\n\r\n\t/**\r\n\t * A container that chart's cursor is placed in.\r\n\t */\r\n\tprotected _cursorContainer: Container;\r\n\r\n\t/**\r\n\t * Defines the type of horizontal axis rederer.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX = AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis rederer.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY = AxisRendererY;\r\n\r\n\t/**\r\n\t * Defines the type horizontal axis renderer.\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis renderer.\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererY;\r\n\r\n\t/**\r\n\t * A button which is used to zoom out the chart.\r\n\t */\r\n\tprotected _zoomOutButton: Button;\r\n\r\n\t/**\r\n\t * An element that is used as a mask to contain bullets from spilling out of\r\n\t * the plot area.\r\n\t */\r\n\tprotected _bulletMask: Sprite;\r\n\r\n\r\n\tprotected _panStartXRange: IRange;\r\n\r\n\tprotected _panStartYRange: IRange;\r\n\r\n\tprotected _panEndXRange: IRange;\r\n\r\n\tprotected _panEndYRange: IRange;\r\n\r\n\tprotected _mouseWheelDisposer: IDisposer;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYChart\";\r\n\r\n\t\t// Set defaults\r\n\t\t//this.margin(10, 10, 10, 10);\r\n\t\tthis.maskBullets = true;\r\n\t\tthis.arrangeTooltips = true;\r\n\r\n\t\t// Create main chart container\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.layout = \"vertical\";\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Create top axes container\r\n\t\tlet topAxesCont = chartContainer.createChild(Container);\r\n\t\ttopAxesCont.shouldClone = false;\r\n\t\ttopAxesCont.layout = \"vertical\";\r\n\t\ttopAxesCont.width = percent(100);\r\n\t\ttopAxesCont.zIndex = 1;\r\n\t\tthis.topAxesContainer = topAxesCont;\r\n\r\n\t\t// Create vertical axes and plot area container\r\n\t\t// Plot area and vertical axes share the whole width of the chart,\r\n\t\t// so we need to put then into a separate container so that layouting\r\n\t\t// engine takes care of the positioning\r\n\t\tlet yAxesAndPlotCont = chartContainer.createChild(Container);\r\n\t\tyAxesAndPlotCont.shouldClone = false;\r\n\t\tyAxesAndPlotCont.layout = \"horizontal\";\r\n\t\tyAxesAndPlotCont.width = percent(100);\r\n\t\tyAxesAndPlotCont.height = percent(100);\r\n\t\tyAxesAndPlotCont.zIndex = 0;\r\n\t\tthis.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n\r\n\t\t// Create a container for bottom axes\r\n\t\tlet bottomAxesCont = chartContainer.createChild(Container);\r\n\t\tbottomAxesCont.shouldClone = false;\r\n\t\tbottomAxesCont.width = percent(100);\r\n\t\tbottomAxesCont.layout = \"vertical\";\r\n\t\tbottomAxesCont.zIndex = 1;\r\n\t\tthis.bottomAxesContainer = bottomAxesCont;\r\n\r\n\t\t// Create a container for left-side axes\r\n\t\tlet leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tleftAxesCont.shouldClone = false;\r\n\t\tleftAxesCont.layout = \"horizontal\";\r\n\t\tleftAxesCont.height = percent(100);\r\n\t\tleftAxesCont.contentAlign = \"right\";\r\n\t\tleftAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tleftAxesCont.zIndex = 1;\r\n\t\tthis.leftAxesContainer = leftAxesCont;\r\n\r\n\t\t// Create a container for plot area\r\n\t\tlet plotCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tplotCont.shouldClone = false;\r\n\t\tplotCont.height = percent(100);\r\n\t\tplotCont.width = percent(100);\r\n\t\t// Create transparend background for plot container so that hover works\r\n\t\t// on all of it\r\n\t\tplotCont.background.fillOpacity = 0;\r\n\t\tthis.plotContainer = plotCont;\r\n\r\n\t\t// must go below plot container\r\n\t\tthis.mouseWheelBehavior = \"none\";\r\n\r\n\t\tthis._cursorContainer = plotCont;\r\n\r\n\t\t// Create a container for right-side axes\r\n\t\tlet rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\trightAxesCont.shouldClone = false;\r\n\t\trightAxesCont.layout = \"horizontal\";\r\n\t\trightAxesCont.height = percent(100);\r\n\t\trightAxesCont.zIndex = 1;\r\n\t\trightAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tthis.rightAxesContainer = rightAxesCont;\r\n\r\n\t\tthis.seriesContainer.parent = plotCont;\r\n\t\tthis.bulletsContainer.parent = plotCont;\r\n\r\n\t\tlet zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n\t\tzoomOutButton.shouldClone = false;\r\n\t\tzoomOutButton.align = \"right\";\r\n\t\tzoomOutButton.valign = \"top\";\r\n\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\tzoomOutButton.marginTop = 5;\r\n\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\tzoomOutButton.hide(0);\r\n\t\tthis.zoomOutButton = zoomOutButton;\r\n\r\n\t\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererX();\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateXAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new vertical (Y) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processYAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererY();\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateYAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.zoomAxes(this.xAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarX, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n\t * zoomed out or not.\r\n\t */\r\n\tprotected toggleZoomOutButton() {\r\n\t\tif (this.zoomOutButton) {\r\n\t\t\tlet show = false;\r\n\r\n\t\t\t$iter.eachContinue(this.xAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\t$iter.eachContinue(this.yAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tif (!this.seriesAppeared) {\r\n\t\t\t\tshow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (show) {\r\n\t\t\t\tthis.zoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.zoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * moved this check to a separate method so that we could override it in TreeMapSeries\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\tlet appeared: boolean = false;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (!series.appeared) {\r\n\t\t\t\tappeared = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn appeared;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.zoomAxes(this.yAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarY, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a relative scrollbar whenever data range of the axis changes.\r\n\t *\r\n\t * @param scrollbar Scrollbar instance\r\n\t * @param range New data (values) range of the axis\r\n\t */\r\n\tprotected updateScrollbar(scrollbar: Scrollbar, range: IRange): void {\r\n\t\tif (scrollbar) {\r\n\t\t\tscrollbar.skipRangeEvents();\r\n\t\t\tscrollbar.start = range.start;\r\n\t\t\tscrollbar.end = range.end;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a common range of values between a list of axes.\r\n\t *\r\n\t * This is used to synchronize the zoom between multiple axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axes A list of axes\r\n\t * @return Common value range\r\n\t */\r\n\tpublic getCommonAxisRange(axes: List): IRange {\r\n\t\tlet start: Optional;\r\n\t\tlet end: Optional;\r\n\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tlet axisStart = axis.start;\r\n\t\t\tlet axisEnd = axis.end;\r\n\r\n\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\taxisStart = 1 - axis.end;\r\n\t\t\t\taxisEnd = 1 - axis.start;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(start) || (axisStart < start)) {\r\n\t\t\t\tstart = axisStart;\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(end) || (axisEnd > end)) {\r\n\t\t\t\tend = axisEnd;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn { start: start, end: end };\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.topAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.bottomAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.rightAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.leftAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n\t * and containers for placement.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\t// Value axis does not use data directly, only category axis does\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\tthis._dataUsers.moveValue(axis);\r\n\t\t}\r\n\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\r\n\t\trenderer.gridContainer.parent = this.plotContainer;\r\n\t\trenderer.gridContainer.toBack();\r\n\r\n\t\trenderer.breakContainer.parent = this.plotContainer;\r\n\t\trenderer.breakContainer.toFront();\r\n\t\trenderer.breakContainer.zIndex = 10;\r\n\r\n\t\taxis.addDisposer(new Disposer(() => {\r\n\t\t\tthis.dataUsers.removeValue(axis);\r\n\t\t}))\r\n\r\n\t\tthis.plotContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\taxis.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * A list of horizontal (X) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get xAxes(): List> {\r\n\t\tif (!this._xAxes) {\r\n\t\t\tthis._xAxes = new List>();\r\n\t\t\tthis._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n\t\t\tthis._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._xAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAxisRemoval(event: IListEvents[\"removed\"]) {\r\n\t\tlet axis = event.oldValue;\r\n\t\tthis.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n\t\tif (axis.autoDispose) {\r\n\t\t\taxis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of vertical (Y) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get yAxes(): List> {\r\n\t\tif (!this._yAxes) {\r\n\t\t\tthis._yAxes = new List>();\r\n\t\t\tthis._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n\t\t\tthis._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._yAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[XYSeries]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\ttry {\r\n\t\t\tsuper.handleSeriesAdded(event);\r\n\t\t\tlet series: XYSeries = event.newValue;\r\n\t\t\tseries.xAxis; // this is enough to get axis, handled in getter\r\n\t\t\tseries.yAxis; // this is enough to get axis, handled in getter\r\n\r\n\t\t\tif (series.fill == undefined) {\r\n\t\t\t\tseries.fill = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.stroke == undefined) {\r\n\t\t\t\tseries.stroke = series.fill;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart's [[Cursor]].\r\n\t *\r\n\t * @param cursor Cursor\r\n\t */\r\n\tpublic set cursor(cursor: this[\"_cursor\"]) {\r\n\t\tif (this._cursor != cursor) {\r\n\t\t\tif (this._cursor) {\r\n\t\t\t\tthis.removeDispose(this._cursor);\r\n\t\t\t}\r\n\r\n\t\t\tthis._cursor = cursor;\r\n\r\n\t\t\tif (cursor) {\r\n\t\t\t\t// TODO this is wrong, fix it\r\n\t\t\t\tthis._disposers.push(cursor);\r\n\t\t\t\tcursor.chart = this;\r\n\t\t\t\tcursor.parent = this._cursorContainer;\r\n\t\t\t\tcursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n\t\t\t\tcursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n\t\t\t\tcursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n\t\t\t\tcursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n\t\t\t\tcursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Cursor\r\n\t */\r\n\tpublic get cursor(): this[\"_cursor\"] {\r\n\t\treturn this._cursor;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tlet cursor = this.cursor;\r\n\r\n\t\tif (cursor.visible && !cursor.isHiding) {\r\n\t\t\tlet xPosition: number = this.cursor.xPosition;\r\n\t\t\tlet yPosition: number = this.cursor.yPosition;\r\n\r\n\t\t\tthis.showSeriesTooltip({\r\n\t\t\t\tx: xPosition,\r\n\t\t\t\ty: yPosition\r\n\t\t\t});\r\n\r\n\t\t\tlet exceptAxis: Axis;\r\n\t\t\tlet snapToSeries = cursor.snapToSeries;\r\n\t\t\tif (snapToSeries) {\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.xAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.yAxis;\r\n\t\t\t\t}\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.yAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.showAxisTooltip(this.xAxes, xPosition, exceptAxis);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition, exceptAxis);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleHideCursor(): void {\r\n\t\tthis.hideObjectTooltip(this.xAxes);\r\n\t\tthis.hideObjectTooltip(this.yAxes);\r\n\t\tthis.hideObjectTooltip(this.series);\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates values for each series' legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSeriesLegend(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.updateLegendValue();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hides a tooltip for a list of objects.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param sprites A list of sprites to hide tooltip for\r\n\t */\r\n\tpublic hideObjectTooltip(sprites: List): void {\r\n\t\t$iter.each(sprites.iterator(), (sprite) => {\r\n\t\t\tsprite.hideTooltip(0);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows a tooltip for all chart's series, using specific coordinates as a\r\n\t * reference point.\r\n\t *\r\n\t * The tooltip might be shown at different coordinates depending on the\r\n\t * actual data point's position, overlapping with other tooltips, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Reference point\r\n\t */\r\n\tpublic showSeriesTooltip(position?: IPoint): void {\r\n\r\n\t\tif (!position) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.hideTooltip();\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\tlet sum = 0;\r\n\t\tthis.series.each((series) => {\r\n\t\t\t//if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n\r\n\t\t\tif ((series.xAxis instanceof DateAxis && series.xAxis.snapTooltip) || (series.yAxis instanceof DateAxis && series.yAxis.snapTooltip)) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet point = series.showTooltipAtPosition(position.x, position.y);\r\n\t\t\t\tif (point) {\r\n\t\t\t\t\tseries.tooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: this.pixelHeight });\r\n\t\t\t\t\tseriesPoints.push({ series: series, point: point });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//}\r\n\t\t});\r\n\r\n\t\tif (this.arrangeTooltips) {\r\n\t\t\tthis.sortSeriesTooltips(seriesPoints);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic sortSeriesTooltips(seriesPoints: { point: IPoint, series: XYSeries }[]) {\r\n\r\n\t\tlet topLeft = $utils.spritePointToSvg({ x: -0.5, y: -0.5 }, this.plotContainer);\r\n\t\tlet bottomRight = $utils.spritePointToSvg({ x: this.plotContainer.pixelWidth + 0.5, y: this.plotContainer.pixelHeight + 0.5 }, this.plotContainer);\r\n\r\n\t\tlet sum = 0;\r\n\t\tlet filteredSeriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\t$array.each(seriesPoints, (seriesPoint) => {\r\n\t\t\tlet point = seriesPoint.point;\r\n\t\t\tif (point && $math.isInRectangle(point, { x: topLeft.x, y: topLeft.y, width: bottomRight.x - topLeft.x, height: bottomRight.y - topLeft.y })) {\r\n\t\t\t\tfilteredSeriesPoints.push({ point: point, series: seriesPoint.series });\r\n\t\t\t\tsum += point.y;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tseriesPoints = filteredSeriesPoints;\r\n\r\n\t\tseriesPoints.sort((a, b) => {\r\n\t\t\tif (a.point.y > b.point.y) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\telse if (a.point.y < b.point.y) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tlet averageY = sum / seriesPoints.length;\r\n\t\tlet maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n\r\n\t\tif (seriesPoints.length > 0) {\r\n\r\n\t\t\tlet top = topLeft.y;\r\n\t\t\tlet bottom = bottomRight.y;\r\n\r\n\t\t\tlet topPoint = $utils.spritePointToDocument({ x: 0, y: top }, this);\r\n\r\n\t\t\tlet dropped = false;\r\n\r\n\t\t\tif (averageY > top + (bottom - top) / 2) {\r\n\t\t\t\tlet nextHeight = bottom;\r\n\t\t\t\tfor (let i = seriesPoints.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\t\t\t\t\tnextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\r\n\r\n\t\t\t\t\tif (nextHeight < -maxY) {\r\n\t\t\t\t\t\tdropped = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (averageY <= top + (bottom - top) / 2 || dropped) {\r\n\t\t\t\tlet nextY = top;\r\n\t\t\t\tfor (let i = 0, len = seriesPoints.length; i < len; i++) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\r\n\t\t\t\t\tnextY = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY + tooltip.label.measuredHeight - tooltip.pixelY + pointY + tooltip.pixelMarginBottom }, tooltip).y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows tooltips for a list of axes at specific position.\r\n\t *\r\n\t * Position might be X coordinate for horizontal axes, and Y coordinate for\r\n\t * vertical axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axes List of axes to show tooltip on\r\n\t * @param position Position (px)\r\n\t */\r\n\tpublic showAxisTooltip(axes: List, position: number, except?: Axis): void {\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tif (axis != except) {\r\n\t\t\t\tif (this.dataItems.length > 0 || axis.dataItems.length > 0) {\r\n\t\t\t\t\taxis.showTooltipAtPosition(position);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n\t *\r\n\t * @param axis Axis\r\n\t * @param range Range\r\n\t * @return Modified range\r\n\t */\r\n\tpublic getUpdatedRange(axis: Axis, range: IRange): IRange {\r\n\r\n\t\tif (!axis) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet start: number;\r\n\t\tlet end: number;\r\n\t\tlet inversed = axis.renderer.inversed;\r\n\r\n\t\tif (axis.renderer instanceof AxisRendererY) {\r\n\t\t\trange = $math.invertRange(range);\r\n\t\t}\r\n\r\n\t\tif (inversed) {\r\n\t\t\t$math.invertRange(range);\r\n\r\n\t\t\tstart = 1 - axis.end;\r\n\t\t\tend = 1 - axis.start;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstart = axis.start;\r\n\t\t\tend = axis.end;\r\n\t\t}\r\n\r\n\t\tlet difference: number = end - start;\r\n\r\n\t\treturn {\r\n\t\t\tstart: start + range.start * difference,\r\n\t\t\tend: start + range.end * difference\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user finishes zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomEnd(event: IXYCursorEvents[\"zoomended\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tif (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n\t\t\tlet xRange: IRange = cursor.xRange;\r\n\t\t\tif (xRange && this.xAxes.length > 0) {\r\n\t\t\t\txRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n\t\t\t\txRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.xAxes, xRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n\t\t\tlet yRange: IRange = cursor.yRange;\r\n\t\t\tif (yRange && this.yAxes.length > 0) {\r\n\t\t\t\tyRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n\t\t\t\tyRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.yAxes, yRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanStart(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\tif (xAxis) {\r\n\t\t\tthis._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n\t\t}\r\n\r\n\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\tif (yAxis) {\r\n\t\t\tthis._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user ends panning\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanEnd(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\r\n\t\tif (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndXRange;\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndXRange = undefined;\r\n\t\t\tthis._panStartXRange = undefined;\r\n\t\t}\r\n\t\tif (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndYRange;\r\n\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndYRange = undefined;\r\n\t\t\tthis._panStartYRange = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleCursorCanceled(): void {\r\n\t\tthis._panEndXRange = undefined;\r\n\t\tthis._panStartXRange = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanning(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tlet maxPanOut = cursor.maxPanOut;\r\n\t\tif (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartXRange;\r\n\t\t\tlet range = cursor.xRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.xAxes);\r\n\r\n\t\t\tlet difference = (panStartRange.end - panStartRange.start);\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndXRange = newRange;\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tif (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartYRange;\r\n\t\t\tlet range = cursor.yRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndYRange = newRange;\r\n\t\t\tthis.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user starts zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomStart(event: IXYCursorEvents[\"zoomstarted\"]): void {\r\n\r\n\t\t// Nothing here\r\n\t\t// This method is here only as a \"placeholder\" for extending classes to\r\n\t\t// override if necessary\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal (X) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarX(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarX) {\r\n\t\t\tthis.removeDispose(this._scrollbarX);\r\n\t\t}\r\n\t\tthis._scrollbarX = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.topAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toBack();\r\n\t\t\tscrollbar.orientation = \"horizontal\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\t\t\tif (xAxis) {\r\n\t\t\t\t\targ.value = xAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarX(): Scrollbar {\r\n\t\treturn this._scrollbarX;\r\n\t}\r\n\r\n\t/**\r\n\t * Vertical (Y) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarY(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarY) {\r\n\t\t\tthis.removeDispose(this._scrollbarY);\r\n\t\t}\r\n\t\tthis._scrollbarY = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.rightAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toFront();\r\n\t\t\tscrollbar.orientation = \"vertical\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\t\t\tif (yAxis) {\r\n\t\t\t\t\targ.value = yAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarY(): Scrollbar {\r\n\t\treturn this._scrollbarY;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleXScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.xAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleYScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.yAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes that are affected by to specific relative range.\r\n\t *\r\n\t * @param axes List of axes to zoom\r\n\t * @param range Range of values to zoom to (0-1)\r\n\t * @param instantly If set to `true` will skip zooming animation\r\n\t * @return Recalculated range that is common to all involved axes\r\n\t */\r\n\tprotected zoomAxes(axes: List>, range: IRange, instantly?: boolean, round?: boolean, declination?: number): IRange {\r\n\t\tlet realRange: IRange = { start: 0, end: 1 };\r\n\r\n\t\tthis.showSeriesTooltip(); // hides\r\n\r\n\t\tif (!this.dataInvalid) {\r\n\t\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\trange = $math.invertRange(range);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxis.hideTooltip(0);\r\n\r\n\t\t\t\tif (round) {\r\n\t\t\t\t\tlet diff = range.end - range.start;\r\n\t\t\t\t\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\trange.end = range.start + diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet axisRange: IRange = axis.zoom(range, instantly, instantly, declination);\r\n\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\taxisRange = $math.invertRange(axisRange);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealRange = axisRange;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn realRange;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if bullet container is masked.\r\n\t *\r\n\t * If it is set to `true`, any bullets that do not fit into bullet container\r\n\t * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n\t * of the plot area so they are not cut off.\r\n\t *\r\n\t * @param value Mask bullet container?\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mask bullet container?\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if chart should arrange series tooltips so that they would not\r\n\t * overlap.\r\n\t *\r\n\t * If set to `true` (default), the chart will adjust vertical positions of\r\n\t * all simultaneously shown tooltips to avoid overlapping.\r\n\t *\r\n\t * However, if you have a vertically-arranged chart, it might not make sense,\r\n\t * because tooltips would most probably not be aligned horizontally. In this\r\n\t * case it would probably be a good idea to set this setting to `false`.\r\n\t *\r\n\t * @default true\r\n\t * @param value Arrange tooltips?\r\n\t */\r\n\tpublic set arrangeTooltips(value: boolean) {\r\n\t\tthis.setPropertyValue(\"arrangeTooltips\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Arrange tooltips?\r\n\t */\r\n\tpublic get arrangeTooltips(): boolean {\r\n\t\treturn this.getPropertyValue(\"arrangeTooltips\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\t\tlet plotContainer = this.plotContainer;\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n\t\tlet shift = event.shift.y;\r\n\r\n\t\tlet rangeX: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tlet rangeY: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tlet shiftStep = 0.05;\r\n\r\n\t\tlet maxPanOut = 0;\r\n\r\n\t\tlet mouseWheelBehavior = this.mouseWheelBehavior;\r\n\r\n\t\tif (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n\r\n\t\t\tlet differenceX = rangeX.end - rangeX.start;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartX <= 0) {\r\n\t\t\t\tnewEndX = newStartX + differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndX >= 1) {\r\n\t\t\t\tnewStartX = newEndX - differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n\t\t\tshift *= -1;\r\n\t\t\tlet differenceY = rangeY.end - rangeY.start;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartY <= 0) {\r\n\t\t\t\tnewEndY = newStartY + differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndY >= 1) {\r\n\t\t\t\tnewStartY = newEndY - differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationX = plotPoint.x / plotContainer.maxWidth;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * shift / 100 * locationX);\r\n\t\t\tnewStartX = Math.min(newStartX, locationX);\r\n\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n\t\t\tnewEndX = Math.max(newEndX, locationX);\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationY = plotPoint.y / plotContainer.maxHeight;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * shift / 100 * (1 - locationY));\r\n\t\t\tnewStartY = Math.min(newStartY, locationY);\r\n\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY, 1 + maxPanOut);\r\n\t\t\tnewEndY = Math.max(newEndY, locationY);\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies action for when mouse wheel is used when over the chart.\r\n\t *\r\n\t * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n\t *\r\n\t * @default \"none\"\r\n\t * @param mouse wheel behavior\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis.plotContainer.wheelable = false;\r\n\t\t\t\t\tthis.plotContainer.hoverable = false;\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-speicifc data fields so they are parsed properly.\r\n\t *\r\n\t * @param fields Array of date fields\r\n\t * @return Array of date fields populated with chart's date fields\r\n\t */\r\n\tprotected dataSourceDateFields(fields: string[]): string[] {\r\n\t\t// Process parent\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-specific data fields so they are parsed properly.\r\n\t *\r\n\t * @param value Array of number fields\r\n\t * @return Array of number fields populated with chart's number fields\r\n\t */\r\n\tprotected dataSourceNumberFields(fields: string[]): string[] {\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Save axis ranges for later processing\r\n\t\t\tlet xAxes: any[] = [];\r\n\t\t\tlet yAxes: any[] = [];\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.xAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\txAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.xAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.xAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.yAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\tyAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.yAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.yAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"LineSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"XYCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up scrollbars\r\n\t\t\tif ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n\t\t\t\tconfig.scrollbarX.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n\t\t\t\tconfig.scrollbarY.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\r\n\t\t\t// Finish up with ranges.\r\n\t\t\t// We need to do this here because series are processed last in JSON\r\n\t\t\t// config. Therefore their respective objects are not yet are available\r\n\t\t\t// when axis (and respectively their ranges) are being processed.\r\n\t\t\tif (yAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = yAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.yAxes.getIndex(yAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: yAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (xAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = xAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.xAxes.getIndex(xAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: xAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param a Element 1\r\n\t * @param b Element 2\r\n\t * @return Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"scrollbarX\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarX\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"scrollbarY\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarY\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"series\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"series\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new Series of type suitable for this chart.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new XYSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Button]] element that is used for zooming out the chart.\r\n\t *\r\n\t * This button appears only when chart is zoomed in, and disappears\r\n\t * autoamatically when it is zoome dout.\r\n\t *\r\n\t * @param button Zoom out button\r\n\t */\r\n\tpublic set zoomOutButton(button: Button) {\r\n\t\tthis._zoomOutButton = button;\r\n\t\tif (button) {\r\n\t\t\tbutton.events.on(\"hit\", () => {\r\n\t\t\t\tthis.zoomAxes(this.xAxes, { start: 0, end: 1 });\r\n\t\t\t\tthis.zoomAxes(this.yAxes, { start: 0, end: 1 });\r\n\t\t\t}, undefined, false);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Zoom out button\r\n\t */\r\n\tpublic get zoomOutButton(): Button {\r\n\t\treturn this._zoomOutButton;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[XYChart]].\r\n\t *\r\n\t * @param source Source XYChart\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.xAxes.copyFrom(source.xAxes);\r\n\t\tthis.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tthis.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\t\t//@todo copy all container properties\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\r\n\t\tlet scrollbarX = this.scrollbarX;\r\n\t\tif (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarX.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tlet scrollbarY = this.scrollbarY;\r\n\t\tif (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarY.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\r\n\t\tthis.yAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Adds one or several (array) of data items to the existing data.\r\n\t *\r\n\t * @param rawDataItem One or many raw data item objects\r\n\t */\r\n\tpublic addData(rawDataItem: Object | Object[], removeCount?: number): void {\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.setElement(this.paper.add(\"path\"));\r\n\t\tstrokeSprite.isMeasured = false;\r\n\t\tthis._disposers.push(strokeSprite);\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points Points to connect\r\n\t * @param closePoints ?\r\n\t * @param smoothnessX Horizontal bezier setting (?)\r\n\t * @param smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number): void {\r\n\t\tif (!this.disabled) {\r\n\t\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\t\t\t\t// first moveTo helps to avoid Chrome straight line in the mask bug.\r\n\t\t\t\tlet path: string = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n\r\n\t\t\t\tif (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n\t\t\t\t\t// like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.strokeSprite.path = path;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fillSprite.path = \"\";\r\n\t\t\t\tthis.strokeSprite.path = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties from a [[Sprite]] to both line and fill elements.\r\n\t *\r\n\t * @param source Source [[Sprite]] to copy properties from\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tlet lineElement = this.strokeSprite;\r\n\t\t$object.copyProperties(source, lineElement.properties, visualProperties);\r\n\t\tlineElement.fillOpacity = 0;\r\n\r\n\t\tlet fillElement = this.fillSprite;\r\n\t\t$object.copyProperties(source, fillElement.properties, visualProperties);\r\n\t\tfillElement.strokeOpacity = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeriesSegment.ts","/**\r\n * Line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesDataFields, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { LineSeriesSegment, ILineSeriesSegmentProperties } from \"./LineSeriesSegment\";\r\nimport { Axis, AxisDataItem } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { LegendDataItem } from \"../Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class LineSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: LineSeries;\r\n\r\n\t/**\r\n\t * Point of line series data item\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\r\n\t * A reference to a segment object, used for getting proper colors for tooltips\r\n\t */\r\n\tpublic segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesDataItem\";\r\n\t}\r\n\r\n\t// @todo: minimums/maximums\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Vertical tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionY?: number;\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnect?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesAdapters extends IXYSeriesAdapters, ILineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: LineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of line series segments.\r\n\t *\r\n\t * Segments are used in two cases:\r\n\t *\r\n\t * * When we want to change the appearance of a part of the line series;\r\n\t * * When we have an axis range.\r\n\t */\r\n\tpublic segments: ListTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * A container for segment elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic segmentsContainer: Container;\r\n\r\n\t/**\r\n\t * Minimum distance in pixels between two adjacent points.\r\n\t *\r\n\t * If the distance is less than this setting, a point is skipped.\r\n\t *\r\n\t * This allows acceptable performance with huge amounts of data points.\r\n\t *\r\n\t * @default 0.5\r\n\t */\r\n\tpublic minDistance: number = 0.5;\r\n\r\n\t/**\r\n\t * Iterator for segments.\r\n\t */\r\n\tprotected _segmentsIterator: $iter.ListIterator;\r\n\r\n\tprotected _adjustedStartIndex:number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.segments = new ListTemplate(this.createSegment());\r\n\t\tthis.segments.template.applyOnClones = true;\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.segments));\r\n\t\tthis._disposers.push(this.segments.template);\r\n\r\n\t\tthis._segmentsIterator = new $iter.ListIterator(this.segments, () => this.segments.create());\r\n\t\tthis._segmentsIterator.createNewItems = true;\r\n\r\n\t\tthis.className = \"LineSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.fillOpacity = 0;\r\n\r\n\t\tthis.connect = true;\r\n\r\n\t\tthis.tensionX = 1;\r\n\t\tthis.tensionY = 1;\r\n\r\n\t\tthis.segmentsContainer = this.mainContainer.createChild(Container);\r\n\t\tthis.segmentsContainer.isMeasured = false;\r\n\r\n\t\t// line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n\t\t// todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n\t\t// this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Line Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new LineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new LineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\t// this makes data items animate when added\r\n\t\tif (this.appeared && this.visible) {\r\n\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\t\tlet previousDataItem: XYSeriesDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n\r\n\t\t\tdataItem.component = this; // as these values are set before, we don't know component yet\r\n\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialY: number = yAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialY = previousDataItem.values[\"valueY\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this makes line animate from previous point to newly added point\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tif (xAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialX: number = xAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialX = previousDataItem.values[\"valueX\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n\r\n\t\t\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates corresponding legend data item with current values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.openSegment(this._adjustedStartIndex);\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\tthis.openSegment(this._adjustedStartIndex, range);\r\n\t\t});\r\n\r\n\t\t$iter.each(this._segmentsIterator.iterator(), (segment) => {\r\n\t\t\tsegment.__disabled = true;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [sliceData description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected sliceData(): void {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\t// we need extra one item to both sides with values for line series, otherwise the line will not continue out of bounds of the chart while scrolling\r\n\t\t// find first to the left\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.startIndex - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tstartIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._adjustedStartIndex = this.findAdjustedIndex(startIndex, [\"stroke\", \"strokeWidth\", \"strokeDasharray\", \"strokeOpacity\", \"fill\", \"fillOpacity\", \"opacity\"]);\r\n\r\n\t\t// find first to the right\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tendIndex = i + 1;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._workingStartIndex = startIndex;\r\n\t\tthis._workingEndIndex = endIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected findAdjustedIndex(adjustedIndex: number, properties: string[]): number {\r\n\t\tlet propertyFields:any = this.propertyFields;\r\n\t\tlet startIndex = adjustedIndex;\r\n\t\t$array.each(properties, (property) => {\r\n\t\t\tif ($type.hasValue(propertyFields[property])) {\r\n\t\t\t\tfor (let i = startIndex; i >= 0; i--) {\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif ($type.hasValue(dataItem.properties[property])) {\r\n\t\t\t\t\t\tif (adjustedIndex > i) {\r\n\t\t\t\t\t\t\tadjustedIndex = i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn adjustedIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * [openSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param openIndex [description]\r\n\t * @param axisRange [description]\r\n\t */\r\n\tprotected openSegment(openIndex: number, axisRange?: AxisDataItem): void {\r\n\t\tlet points: IPoint[] = [];\r\n\r\n\t\tlet endIndex: number = this._workingEndIndex;\r\n\r\n\t\tlet closeIndex: number;\r\n\t\tlet propertiesChanged: boolean = false;\r\n\r\n\t\tlet segment: LineSeriesSegment = this._segmentsIterator.getFirst();\r\n\t\tsegment.__disabled = false;\r\n\r\n\t\tif (axisRange) {\r\n\t\t\tsegment.parent = axisRange.contents;\r\n\t\t\t$object.copyProperties(axisRange.contents, segment, visualProperties);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$object.copyProperties(this, segment, visualProperties);\r\n\t\t\tsegment.filters.clear();\r\n\t\t\tsegment.parent = this.segmentsContainer;\r\n\t\t}\r\n\r\n\t\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.closeSegment(segment, points, openIndex, closeIndex, axisRange);\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean) {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n\t\tif (!backwards) {\r\n\t\t\tdataItem.point = point;\r\n\t\t}\r\n\t\tpoints.push(point);\r\n\t}\r\n\r\n\t/**\r\n\t * [closeSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param openIndex [description]\r\n\t * @param closeIndex [description]\r\n\t * @param axisRange [description]\r\n\t */\r\n\tprotected closeSegment(segment: LineSeriesSegment, points: IPoint[], openIndex: number, closeIndex: number, axisRange?: AxisDataItem) {\r\n\r\n\t\tlet closePoints: IPoint[] = [];\r\n\r\n\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\tthis.stacked) {\r\n\t\t\tfor (let i: number = closeIndex; i >= openIndex; i--) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n\t\t\t\t\tthis.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet baseAxis: Axis = this.baseAxis;\r\n\t\t\tlet count: number = points.length;\r\n\t\t\tlet xAxis: Axis = this.xAxis;\r\n\t\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\t\tif (baseAxis == xAxis) {\r\n\t\t\t\tclosePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n\t\t\t\tclosePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawSegment(segment, points, closePoints);\r\n\r\n\t\tif (closeIndex < this._workingEndIndex - 1) {\r\n\t\t\tthis.openSegment(closeIndex, axisRange);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment Segment\r\n\t * @param points Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n\t}\r\n\r\n\t/**\r\n\t * Segement will get its colors from `this.dataItem`, as thats how\r\n\t * `getPropertyValue()` method works.\r\n\t *\r\n\t * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n\t * `hasProperties` is set to `true` on data item (this means it can contain\r\n\t * some properties set).\r\n\t *\r\n\t * @param itemProperties Item properties\r\n\t * @param segment Segment\r\n\t * @return Properties changed?\r\n\t */\r\n\tprotected updateSegmentProperties(itemProperties: { [index: string]: any }, segment: LineSeriesSegment, checkOnly?: boolean): boolean {\r\n\t\tlet changed: boolean = false;\r\n\r\n\t\t$object.each(itemProperties, (propertyName, value) => {\r\n\t\t\t// some value must be defined\r\n\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\tlet currentValue = (segment)[propertyName];\r\n\t\t\t\tlet currentValueStr: string;\r\n\t\t\t\t// current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n\t\t\t\t// toString() will return hex if it's color. The only problem is that it will return lowercased hex and if we have uppercase in data, it will think that it changed\r\n\t\t\t\tif (currentValue) {\r\n\t\t\t\t\tif (currentValue.toString) {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tlet valueStr: string;\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tif (value.toString) {\r\n\t\t\t\t\t\tvalueStr = value.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tvalueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (!checkOnly) {\r\n\t\t\t\t\t\t(segment)[propertyName] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * If set to `true` the line will connect two adjacent data points by a\r\n\t * straight line. Even if there are data points with missing values\r\n\t * in-between.\r\n\t *\r\n\t * If you set this to `false`, the line will break when there are missing\r\n\t * values.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n\t * @default true\r\n\t * @param value Connect?\r\n\t */\r\n\tpublic set connect(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"connect\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connect(): boolean {\r\n\t\treturn this.getPropertyValue(\"connect\");\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for horizontal tension, meaning the curve will bend in\r\n\t * such way that it never goes below or above connecting points. To enable\r\n\t * vertical bending as well, use `tensionY`.\r\n\t *\r\n\t * @default 1\r\n\t * @param value Horizontal tension (0-1)\r\n\t */\r\n\tpublic set tensionX(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Horizontal tension (0-1)\r\n\t */\r\n\tpublic get tensionX(): number {\r\n\t\treturn this.getPropertyValue(\"tensionX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for vertical tension, meaning the curve might bend in\r\n\t * such way that it will go below or above connected points.\r\n\t *\r\n\t * Combine this setting with `tensionX` to create beautifully looking\r\n\t * smoothed line series.\r\n\t *\r\n\t * @default 1\r\n\t * @param value Vertical tension (0-1)\r\n\t */\r\n\tpublic set tensionY(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Vertical tension (0-1)\r\n\t */\r\n\tpublic get tensionY(): number {\r\n\t\treturn this.getPropertyValue(\"tensionY\");\r\n\t}\r\n\r\n\r\n\t/*\r\n public positionBullet(bullet: Bullet): void {\r\n\t super.positionBullet(bullet);\r\n\r\n\t let dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t if (dataItem.segment) {\r\n\t\t $object.softCopyProperties(dataItem.segment, bullet, visualProperties);\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.disposeChildren();\r\n\r\n\t\tlet line: Line = marker.createChild(Line);\r\n\t\tline.shouldClone = false;\r\n\t\t//line.copyFrom(this); coppies events which is not good\r\n\t\t$object.copyProperties(this, line, visualProperties);\r\n\r\n\t\tline.x2 = w;\r\n\t\tline.y = h / 2;\r\n\t\tline.visible = true;\r\n\r\n\t\tif (this.fillOpacity > 0) {\r\n\t\t\tlet fill: Rectangle = marker.createChild(Rectangle);\r\n\t\t\t//fill.copyFrom(this); coppies events which is not good\r\n\t\t\t$object.copyProperties(this, fill, visualProperties);\r\n\t\t\tfill.width = w;\r\n\t\t\tfill.height = h;\r\n\t\t\tfill.y = 0;\r\n\t\t\tfill.strokeOpacity = 0;\r\n\t\t\tfill.visible = true;\r\n\r\n\t\t\tline.y = 0;\r\n\t\t}\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.stroke;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\r\n\t\t$iter.eachContinue(this.bullets.iterator(), (bullet) => {\r\n\t\t\tif (bullet.copyToLegendMarker) {\r\n\r\n\t\t\t\t// do not copy bullets with labels\r\n\t\t\t\tlet hasLabels: boolean = false;\r\n\t\t\t\t$iter.each(bullet.children.iterator(), (child) => {\r\n\t\t\t\t\tif (child instanceof Label) {\r\n\t\t\t\t\t\thasLabels = true;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!hasLabels) {\r\n\t\t\t\t\tlet clone: Sprite = bullet.clone();\r\n\t\t\t\t\tclone.parent = marker;\r\n\t\t\t\t\tclone.isMeasured = true;\r\n\t\t\t\t\tclone.tooltipText = undefined;\r\n\t\t\t\t\tclone.x = w / 2;\r\n\t\t\t\t\tif (this.fillOpacity > 0) {\r\n\t\t\t\t\t\tclone.y = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tclone.y = h / 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclone.visible = true;\r\n\r\n\t\t\t\t\t// otherwise will not transit to color after hiding\r\n\t\t\t\t\tif (!$type.hasValue(clone.fill)) {\r\n\t\t\t\t\t\tclone.fill = this.fill;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!$type.hasValue(clone.stroke)) {\r\n\t\t\t\t\t\tclone.stroke = this.stroke;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.segments.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeries\"] = LineSeries;\r\nregistry.registeredClasses[\"LineSeriesDataItem\"] = LineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeries.ts","/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param closePoints [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.mask = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point to check\r\n\t * @return Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\t\tlet angle = $math.getAngle(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\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[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"./AxisRendererY\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { PointerOrientation } from \"../../core/elements/Tooltip\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = chart.dataItems.length;\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angle here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param value Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet count = chart.dataItems.length;\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number): void {\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (0-1)\r\n\t * @return Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n\t\treturn this.coordinateToPosition(coordinate);\r\n\t}\r\n}\r\n\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[\"AxisRendererRadial\"] = AxisRendererRadial;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","/**\r\n * Radar chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { RadarCursor } from \"../cursors/RadarCursor\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarChartDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarChart]].\r\n */\r\nexport interface IRadarChartDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarChart]].\r\n */\r\nexport interface IRadarChartProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Radius of the Radar face. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Radar face. Percent value is relative to radius.\r\n\t *\r\n\t * @todo review desc\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarChart]].\r\n */\r\nexport interface IRadarChartEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarChartAdapters extends IXYChartAdapters, IRadarChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nexport class RadarChart extends XYChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: RadarSeries | RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererCircular = AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererRadial = AxisRendererRadial;\r\n\r\n\t/**\r\n\t * [_cursor description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tpublic _cursor: RadarCursor;\r\n\r\n\t/**\r\n\t * A container that holds Radar visual elements.\r\n\t */\r\n\tpublic radarContainer: Container;\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\r\n\t/**\r\n\t * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic innerRadiusModifyer: number = 1;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChart\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.innerRadius = 0;\r\n\r\n\t\tlet radarContainer = this.plotContainer.createChild(Container);\r\n\t\tradarContainer.shouldClone = false;\r\n\t\tradarContainer.layout = \"absolute\";\r\n\t\tradarContainer.align = \"center\";\r\n\t\tradarContainer.valign = \"middle\";\r\n\r\n\t\tthis.seriesContainer.parent = radarContainer;\r\n\t\tthis.radarContainer = radarContainer;\r\n\t\tthis.bulletsContainer.parent = radarContainer;\r\n\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Cursor, of type suitable for RadarChart.\r\n\t *\r\n\t * @return Cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new RadarCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet radarCont = this.radarContainer;\r\n\t\tlet plotContainer = this.plotContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet wr = plotContainer.innerWidth / rect.width;\r\n\t\tlet hr = plotContainer.innerHeight / rect.height;\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tlet value = innerRadius.value;\r\n\t\t\tlet mr = Math.min(wr, hr);\r\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n\r\n\t\t\tthis.innerRadiusModifyer = value / innerRadius.value;\r\n\t\t\tinnerRadius = percent(value * 100);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for pie also)\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n\r\n\t\tlet diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n\t\tlet radius = diameter / 2;\r\n\t\tlet startAngle = this.startAngle;\r\n\t\tlet endAngle = this.endAngle;\r\n\r\n\t\tthis._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n\r\n\t\tthis._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\tif(axis.renderer.useChartAngles){\r\n\t\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\t\taxis.renderer.endAngle = endAngle;\r\n\t\t\t}\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\taxis.renderer.endAngle = endAngle;\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tlet cursor = this.cursor;\r\n\t\tif (cursor) {\r\n\t\t\tcursor.width = diameter;\r\n\t\t\tcursor.height = diameter;\r\n\t\t\tcursor.startAngle = startAngle;\r\n\t\t\tcursor.endAngle = endAngle;\r\n\t\t}\r\n\r\n\t\tthis.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.radarContainer.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series, suitable for RadarChart.\r\n\t *\r\n\t * @return New Series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new RadarSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius in pixels\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * If set in Percent, it will be relative to `radius`. (outer radius)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\t//do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\t// do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarChart\"] = RadarChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/RadarChart.ts","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { GaugeChart } from \"../types/GaugeChart\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ClockHand]].\r\n */\r\nexport interface IClockHandProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(100)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's tip.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tendWidth: number;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's base.\r\n\t *\r\n\t * @default 5\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @default \"any\"\r\n\t */\r\n\trotationDirection: \"any\" | \"clockWise\" | \"CounterClockWise\";\r\n}\r\n\r\n/**\r\n * Defines events for [[ClockHand]].\r\n */\r\nexport interface IClockHandEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ClockHand]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IClockHandAdapters extends IContainerAdapters, IClockHandProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * ClockHand class is capable of drawing a simple pointy shape with optionally\r\n * rounderd corners and an icon.\r\n *\r\n * @see {@link IClockHandEvents} for a list of available events\r\n * @see {@link IClockHandAdapters} for a list of available Adapters\r\n * @todo Improve\r\n * @important\r\n */\r\nexport class ClockHand extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IClockHandEvents;\r\n\r\n\t/**\r\n\t * A circle element used as hand's base.\r\n\t */\r\n\tprotected _pin: Circle;\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t */\r\n\tprotected _hand: Trapezoid;\r\n\r\n\t/**\r\n\t * An Axis hand is related to.\r\n\t */\r\n\tprotected _axis: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Hand's current value.\r\n\t */\r\n\tprotected _value: any;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ClockHand\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tthis.stroke = this.fill;\r\n\r\n\t\tlet pin: Circle = new Circle();\r\n\t\tpin.radius = 5;\r\n\t\tthis.pin = pin;\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startWidth = 5;\r\n\t\tthis.endWidth = 1;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\tlet hand: Trapezoid = new Trapezoid();\r\n\t\tthis.hand = hand;\r\n\r\n\t\tthis._disposers.push(this._axis);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Re(validates) the clock hand, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet hand = this.hand;\r\n\t\thand.width = this.pixelWidth;\r\n\t\tlet h: number = Math.max(this.startWidth, this.endWidth);\r\n\t\thand.height = h;\r\n\t\thand.leftSide = percent(this.startWidth / h * 100);\r\n\t\thand.rightSide = percent(this.endWidth / h * 100);\r\n\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\r\n\t\t\tlet x0: number = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n\t\t\tlet x1: number = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n\r\n\t\t\thand.x = x0;\r\n\t\t\thand.y = - h / 2;\r\n\r\n\t\t\thand.width = x1 - x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A circle element used as hand's base. (pin)\r\n\t *\r\n\t * @param pin Pin element\r\n\t */\r\n\tpublic set pin(pin: Circle) {\r\n\t\tif (this._pin) {\r\n\t\t\tthis.removeDispose(this._pin);\r\n\t\t}\r\n\t\tif (pin) {\r\n\t\t\tthis._pin = pin;\r\n\t\t\tpin.parent = this;\r\n\t\t\tthis._disposers.push(pin);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Pin element\r\n\t */\r\n\tpublic get pin(): Circle {\r\n\t\treturn this._pin;\r\n\t}\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n\t * `endWidth` properties.\r\n\t *\r\n\t * Set `endWidth` to 1 (px) to make it pointy.\r\n\t *\r\n\t * @param hand Hand element\r\n\t */\r\n\tpublic set hand(hand: Trapezoid) {\r\n\t\tif (this._hand) {\r\n\t\t\tthis.removeDispose(this._hand);\r\n\t\t}\r\n\t\tif (hand) {\r\n\t\t\tthis._hand = hand;\r\n\t\t\thand.parent = this;\r\n\t\t\tthis._disposers.push(hand);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hand element\r\n\t */\r\n\tpublic get hand(): Trapezoid {\r\n\t\treturn this._hand;\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's inner end. (base)\r\n\t *\r\n\t * @default 5\r\n\t * @param value Width (px)\r\n\t */\r\n\tpublic set startWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"startWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get startWidth(): number {\r\n\t\treturn this.getPropertyValue(\"startWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's outer end. (tip)\r\n\t *\r\n\t * @default 1\r\n\t * @param value Width (px)\r\n\t */\r\n\tpublic set endWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"endWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get endWidth(): number {\r\n\t\treturn this.getPropertyValue(\"endWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Rotation direction\r\n\t *\r\n\t * @default any\r\n\t * @param value\r\n\t */\r\n\tpublic set rotationDirection(value: \"any\" | \"clockWise\" | \"counterClockWise\") {\r\n\t\tthis.setPropertyValue(\"rotationDirection\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return rotationDirection\r\n\t */\r\n\tpublic get rotationDirection(): \"any\" | \"clockWise\" | \"counterClockWise\" {\r\n\t\treturn this.getPropertyValue(\"rotationDirection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves clock hand to particular value.\r\n\t *\r\n\t * If `duration` is set to a number in milliseconds, the hand will move\r\n\t * to the new position gracefully, rather than jumping rigth to it.\r\n\t *\r\n\t * Alternatively, you can also set `value` directly.\r\n\t *\r\n\t * @param value New value\r\n\t * @param duration Animation duration (ms)\r\n\t * @param easing Animation easing function\r\n\t */\r\n\tpublic showValue(value: any, duration?: number, easing?: (value: number) => number): void {\r\n\t\tthis._value = value;\r\n\t\tif (value != undefined) {\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tlet renderer = this.axis.renderer;\r\n\t\t\t\tlet newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n\t\t\t\tlet currentAngle = this.rotation;\r\n\r\n\t\t\t\tif (this.rotationDirection == \"clockWise\") {\r\n\t\t\t\t\tif (newAngle < currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle - 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.rotationDirection == \"counterClockWise\") {\r\n\t\t\t\t\tif (newAngle > currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle + 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A current value clock hand is pointing to.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: any) {\r\n\t\tthis.showValue(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): any {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\t/**\r\n\t * An Axis clock hand is associated with.\r\n\t *\r\n\t * Hand's `value` relates to values on the Axis.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set axis(axis: Axis) {\r\n\t\tif (this.axis != axis) {\r\n\t\t\tthis._axis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\tlet chart: GaugeChart = axis.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tthis.rotation = chart.startAngle;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.parent = axis.renderer;\r\n\t\tthis.zIndex = 5;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get axis(): Axis {\r\n\t\treturn this._axis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers `value` accessor, so that Hand animates to new position, in case\r\n\t * value has changed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateValue() {\r\n\t\tthis.value = this.value;\r\n\t}\r\n\r\n\t/**\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\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Connect clock hands with axes\r\n\t\t\tif ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n\t\t\t\tconfig.axis = this.map.getKey(config.axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n}\r\n\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[\"ClockHand\"] = ClockHand;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ClockHand.ts","/**\r\n * Module for building Gauge charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, IRadarChartProperties, IRadarChartDataFields, IRadarChartAdapters, IRadarChartEvents, RadarChartDataItem } from \"./RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t */\r\n\tpublic hands: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected processHand(event: IListEvents[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieChart3D } from \"../types/PieChart3D\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { OrderedList, OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeries3DDataItem extends PieSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines type of the slice represented by this data item.\r\n\t */\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieSeries3D;\r\n\r\n\t/**\r\n\t * @todo Remove?\r\n\t * @deprecated\r\n\t */\r\n\tpublic component: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3DDataItem\";\r\n\r\n\t\tthis.values.depthValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice depth (height).\r\n\t *\r\n\t * @param value Depth\r\n\t */\r\n\tpublic set depthValue(value: number) {\r\n\t\tthis.setValue(\"depthValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth\r\n\t */\r\n\tpublic get depthValue(): number {\r\n\t\treturn this.values[\"depthValue\"].value;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DDataFields extends IPieSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds 3D slice depth (height).\r\n\t */\r\n\tdepthValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DProperties extends IPieSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DEvents extends IPieSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeries3DAdapters extends IPieSeriesAdapters, IPieSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries3D extends PieSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieSeries3DEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PieSeries3DDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: PieChart3D;\r\n\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3D\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeries3DDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice3D();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: PieSeries3DDataItem): void {\r\n\r\n\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\tlet depth: number = this.depth;\r\n\t\tif (!$type.isNumber(depth)) {\r\n\t\t\tdepth = this.chart.depth;\r\n\t\t}\r\n\r\n\t\tlet depthPercent: number = dataItem.values.depthValue.percent;\r\n\t\tif (!$type.isNumber(depthPercent)) {\r\n\t\t\tdepthPercent = 100;\r\n\t\t}\r\n\r\n\t\tslice.depth = depthPercent * depth / 100;\r\n\r\n\t\tlet angle: number = this.angle;\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = this.chart.angle;\r\n\t\t}\r\n\r\n\t\tslice.angle = angle;\r\n\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = this._workingStartIndex; i < this._workingEndIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\t\tvar startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tlet slice = dataItem.slice;\r\n\r\n\t\tbullet.y = bullet.pixelY - slice.depth;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries3D.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChart3DDataItem extends PieChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DDataFields extends IPieChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DProperties extends IPieChartProperties {\r\n\r\n\t/**\r\n\t * Pie's \"depth\" or \"height\" in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Pie's angle at which we are looking at it. (degrees)\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DEvents extends IPieChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChart3DAdapters extends IPieChartAdapters, IPieChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"Pie3DChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"Pie3DSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart3D extends PieChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieChart3DEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3D\";\r\n\r\n\t\tthis.depth = 20;\r\n\t\tthis.angle = 10;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D pie in pixels.\r\n\t *\r\n\t * This will determine \"height\" of the pie.\r\n\t *\r\n\t * @default 20\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tif (this.setPropertyValue(\"depth\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * An angle of a \"point of view\" in degrees. Possible range 0 - 90.\r\n\t *\r\n\t * @default 10\r\n\t * @param value Angle (degrees)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tvalue = $math.fitToRange(value, 0, 90);\r\n\t\tif (this.setPropertyValue(\"angle\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle (degrees)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries3D();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart3D\"] = PieChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart3D.ts","/**\r\n * Sliced chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"../series/FunnelSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SlicedChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: SlicedChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[SlicedChart]]\r\n */\r\nexport interface ISlicedChartProperties extends IPercentChartProperties { }\r\n\r\n/**\r\n * Defines events for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SlicedChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISlicedChartAdapters extends IPercentChartAdapters, ISlicedChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class SlicedChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISlicedChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: FunnelSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChart\";\r\n\r\n\t\tthis.seriesContainer.layout = \"horizontal\";\r\n\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sliced chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SlicedChart.ts","/**\r\n * ChordNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ChordDiagram, ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordNode]].\r\n */\r\nexport interface IChordNodeProperties extends IFlowDiagramNodeProperties { }\r\n\r\n/**\r\n * Defines events for [[ChordNode]].\r\n */\r\nexport interface IChordNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordNodeAdapters extends IFlowDiagramNodeAdapters, IChordNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Chord Diagram.\r\n *\r\n * A Chord node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[ChordLink]] elements.\r\n *\r\n * @see {@link IChordNodeEvents} for a list of available events\r\n * @see {@link IChordNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t */\r\n\tprotected _incomingDataItems: List;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t */\r\n\tprotected _outgoingDataItems: List;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: ChordDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[ChordDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\r\n\t/**\r\n\t * Slice sprite of a node\r\n\t */\r\n\tpublic slice: Slice;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t */\r\n\tpublic label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic nextAngle: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic trueStartAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordNode\";\r\n\r\n\t\tthis.label = this.createChild(AxisLabelCircular);\r\n\t\tthis.label.location = 0.5;\r\n\t\tthis.label.radius = 5;\r\n\t\tthis.label.text = \"{name}\";\r\n\t\tthis.label.zIndex = 1;\r\n\t\tthis.label.shouldClone = false;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\tlet x = slice.radius * $math.cos(labelAngle);\r\n\t\t\tlet y = slice.radius * $math.sin(labelAngle);\r\n\r\n\t\t\tlet point = label.fixPosition(labelAngle, slice.radius);\r\n\r\n\t\t\tthis.nextAngle = startAngle;\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\t\tlink.startAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle;\r\n\t\t\t\t\t\t\tlink.startAngle = this.nextAngle;\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tlink.endAngle = link.startAngle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\r\n\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\r\n\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\tlink.endAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlink.endAngle = this.nextAngle;\r\n\t\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle; // yes, this is needed\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlink.startAngle = link.endAngle;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * updates slice start angle so that when we drag a node it would face the center\r\n\t */\r\n\tprotected updateRotation() {\r\n\t\tlet slice = this.slice;\r\n\t\tlet mAngle = this.trueStartAngle + slice.arc / 2;\r\n\t\tlet radius = slice.radius;\r\n\r\n\t\tlet tx = radius * $math.cos(mAngle);\r\n\t\tlet ty = radius * $math.sin(mAngle);\r\n\r\n\t\tlet angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n\r\n\t\tslice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n\r\n\t\tthis.dx = - this.pixelX;\r\n\t\tthis.dy = - this.pixelY;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[ChordNode]].\r\n\t *\r\n\t * @param source Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t\tthis.slice.copyFrom(source.slice);\r\n\t}\r\n}\r\n\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[\"ChordNode\"] = ChordNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordNode.ts","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line, ILineProperties, ILineAdapters, ILineEvents } from \"./Line\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../defs/IPoint\";\r\nimport { IWavedShape } from \"../defs/IWavedShape\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines available properties for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveProperties extends ILineProperties {\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t */\r\n\tcpx?: number;\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t */\r\n\tcpy?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveEvents extends ILineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[QuadraticCurve]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IQuadraticCurveAdapters extends ILineAdapters, IQuadraticCurveProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nexport class QuadraticCurve extends Line {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IQuadraticCurveEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"QuadraticCurve\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis.pixelPerfect = false;\r\n\r\n\t\tthis.fill = color();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the waved line.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\t//super.draw();\r\n\t\tif($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy )){\r\n\r\n\t\t\tlet p1: IPoint = { x: this.x1, y: this.y1 };\r\n\t\t\tlet p2: IPoint = { x: this.x2, y: this.y2 };\r\n\t\t\tlet cp: IPoint = { x: this.cpx, y: this.cpy };\r\n\r\n\t\t\tlet d: string = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n\r\n\t\t\tthis.path = d;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @param value X\r\n\t */\r\n\tpublic set cpx(value: number) {\r\n\t\tthis.setPropertyValue(\"cpx\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get cpx(): number {\r\n\t\treturn this.getPropertyValue(\"cpx\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @param value Y\r\n\t */\r\n\tpublic set cpy(value: number) {\r\n\t\tthis.setPropertyValue(\"cpy\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get cpy(): number {\r\n\t\treturn this.getPropertyValue(\"cpy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position along the line (0-1) into pixel coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tlet p1 = {x:this.x1, y:this.y1};\r\n\t\tlet cp = {x:this.cpx, y:this.cpy};\r\n\t\tlet p2 = {x:this.x2, y:this.y2};\r\n\r\n\t\tlet point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n\t\tlet point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n\r\n\t\treturn {x:point1.x, y:point1.y, angle:$math.getAngle(point1, point2)};\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/core/elements/QuadraticCurve.ts","/**\r\n * ChordLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordLink]].\r\n */\r\nexport interface IChordLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tradius?: number;\r\n\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tarc?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordLink]].\r\n */\r\nexport interface IChordLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordLinkAdapters extends IFlowDiagramLinkAdapters, IChordLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Chord Diagram.\r\n *\r\n * @see {@link IChordLinkEvents} for a list of available events\r\n * @see {@link IChordLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n */\r\n\tpublic middleLine: QuadraticCurve;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordLink\";\r\n\r\n\t\tthis.middleLine = this.createChild(QuadraticCurve);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\r\n\t\t\tlet arc = this.arc;\r\n\t\t\tlet radius = this.radius;\r\n\r\n\t\t\tlet fromNode = this.dataItem.fromNode;\r\n\t\t\tlet toNode = this.dataItem.toNode;\r\n\r\n\t\t\tlet fromX = 0;\r\n\t\t\tlet fromY = 0;\r\n\r\n\t\t\tif (fromNode) {\r\n\t\t\t\tfromX = fromNode.pixelX + fromNode.dx;\r\n\t\t\t\tfromY = fromNode.pixelY + fromNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tlet toX = 0;\r\n\t\t\tlet toY = 0;\r\n\r\n\t\t\tif (toNode) {\r\n\t\t\t\ttoX = toNode.pixelX + toNode.dx;\r\n\t\t\t\ttoY = toNode.pixelY + toNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tif (radius > 0) {\r\n\t\t\t\tlet x1 = radius * $math.cos(startAngle) + fromX;\r\n\t\t\t\tlet y1 = radius * $math.sin(startAngle) + fromY;\r\n\t\t\t\tlet x2 = radius * $math.cos(endAngle) + toX;\r\n\t\t\t\tlet y2 = radius * $math.sin(endAngle) + toY;\r\n\t\t\t\tlet x3 = radius * $math.cos(endAngle + arc) + toX;\r\n\t\t\t\tlet y3 = radius * $math.sin(endAngle + arc) + toY;\r\n\t\t\t\tlet x4 = radius * $math.cos(startAngle + arc) + fromX;\r\n\t\t\t\tlet y4 = radius * $math.sin(startAngle + arc) + fromY;\r\n\r\n\t\t\t\t//let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n\t\t\t\t//let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n\r\n\t\t\t\t//let cpx = (arcWidth) * $math.cos(cpAngle);\r\n\t\t\t\t//let cpy = (arcWidth) * $math.sin(cpAngle);\r\n\r\n\t\t\t\tlet cp = { x: 0, y: 0 };\r\n\t\t\t\tlet path = $path.moveTo({ x: x1, y: y1 });\r\n\r\n\t\t\t\tpath += $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n\t\t\t\tpath += $path.arcTo(endAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n\r\n\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\tthis.link.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.link.path = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.maskBullets) {\r\n\t\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet mAngle1 = startAngle + arc / 2;\r\n\t\t\t\tlet mAngle2 = endAngle + arc / 2;\r\n\t\t\t\tlet mAngleM = mAngle1 + (mAngle2 - mAngle1) / 2;\r\n\r\n\t\t\t\tlet middleLine = this.middleLine;\r\n\r\n\t\t\t\tmiddleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n\t\t\t\tmiddleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n\t\t\t\tmiddleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n\t\t\t\tmiddleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n\r\n\t\t\t\tmiddleLine.cpx = 0;\r\n\t\t\t\tmiddleLine.cpy = 0;\r\n\r\n\t\t\t\tmiddleLine.stroke = this.fill;\r\n\r\n\t\t\t\tthis.positionBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End Y\r\n\t */\r\n\tpublic set radius(value: number) {\r\n\t\tthis.setPropertyValue(\"radius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End Y\r\n\t */\r\n\tpublic get radius(): number {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set arc(value: number) {\r\n\t\tthis.setPropertyValue(\"arc\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [description]\r\n\t */\r\n\tpublic get arc(): number {\r\n\t\treturn this.getPropertyValue(\"arc\");\r\n\t}\r\n\r\n}\r\n\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[\"ChordLink\"] = ChordLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordLink.ts","/**\r\n * Chord diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, IChartProperties, IChartDataFields, IChartAdapters, IChartEvents, ChartDataItem } from \"../Chart\";\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ChordDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ChordDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: ChordNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ChordDiagram]]\r\n */\r\nexport interface IChordDiagramProperties extends IFlowDiagramProperties {\r\n\t/**\r\n\t * Radius of the Chord. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes. Absolute or relative. Negative value means that the inner radius will be calculated from the radius, not from the center.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * If you set this to true, all the lines will be of the same width.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tnonRibbon?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordDiagramAdapters extends IFlowDiagramAdapters, IChordDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nexport class ChordDiagram extends FlowDiagram {\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordDiagramEvents;\r\n\r\n\t/**\r\n\t * A list of chart's Chord nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tpublic nodes: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, ChordNode]>;\r\n\r\n\t/**\r\n\t * [valueAngle description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic valueAngle: number = 0;\r\n\r\n\t/**\r\n\t * A container for chord elemens.\r\n\t */\r\n\tpublic chordContainer:Container;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:ChordNode;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagram\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\r\n\t\tthis.innerRadius = - 15;\r\n\r\n\t\tthis.nodePadding = 5;\r\n\r\n\t\tlet chordContainer = this.chartContainer.createChild(Container);\r\n\t\tchordContainer.align = \"center\";\r\n\t\tchordContainer.valign = \"middle\";\r\n\t\tchordContainer.shouldClone = false;\r\n\t\tchordContainer.layout = \"absolute\";\r\n\t\tthis.chordContainer = chordContainer;\r\n\r\n\t\tthis.nodesContainer.parent = chordContainer;\r\n\t\tthis.linksContainer.parent = chordContainer;\r\n\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.invalidate, this, false);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tlet nodesContainer = this.nodesContainer;\r\n\r\n\t\tlet endAngle = this.endAngle;\r\n\t\tlet startAngle = this.startAngle + this.nodePadding / 2;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\t\tlet pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\t\tlet count = 0;\r\n\r\n\t\tlet newTotal = 0;\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t\tcount++;\r\n\t\t\tlet value = node.total;\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\t\t\tnewTotal += value;\r\n\t\t});\r\n\r\n\t\tthis.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet slice = node.slice;\r\n\r\n\t\t\tslice.radius = radius;\r\n\t\t\tslice.innerRadius = pixelInnerRadius;\r\n\r\n\t\t\tlet value = node.total;\r\n\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tnode.adjustedTotal = value;\r\n\r\n\t\t\tlet arc: number;\r\n\t\t\tif (this.nonRibbon) {\r\n\t\t\t\tarc = (endAngle - this.startAngle) / count - this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarc = this.valueAngle * value;\r\n\t\t\t}\r\n\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.startAngle = startAngle;\r\n\t\t\tnode.trueStartAngle = startAngle;\r\n\t\t\tnode.parent = this.nodesContainer;\r\n\t\t\tnode.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n\t\t\tstartAngle += arc + this.nodePadding;\r\n\t\t})\r\n\r\n\t\tthis.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.chordContainer.invalidateLayout();\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Chord diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ChordDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set nonRibbon(value: boolean) {\r\n\t\tthis.setPropertyValue(\"nonRibbon\", value, true);\r\n\t\tthis.links.template.middleLine.strokeOpacity = 1;\r\n\t\tthis.links.template.link.fillOpacity = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Non-ribbon\r\n\t */\r\n\tpublic get nonRibbon(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonRibbon\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode():this[\"_node\"]{\r\n\t\tlet node = new ChordNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink():this[\"_link\"]{\r\n\t\tlet link = new ChordLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordDiagram\"] = ChordDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/ChordDiagram.ts","/**\r\n * Column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, IXYSeriesDataFields, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { SpriteState } from \"../../core/SpriteState\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { Axis, AxisItemLocation } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { IDataItemEvents } from \"../../core/DataItem\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ColumnSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * A Column Element\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\t/**\r\n\t * Indicates if this data items close value is lower than its open value.\r\n\t */\r\n\tpublic droppedFromOpen: boolean;\r\n\r\n\t/**\r\n\t * Indicates if this items value is lower than previous data item's value.\r\n\t */\r\n\tpublic droppedFromPrevious: boolean;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t */\r\n\tpublic _component!: ColumnSeries;\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _rangesColumns: Dictionary;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\r\n\t\tthis.locations[\"dateX\"] = 0.5;\r\n\t\tthis.locations[\"dateY\"] = 0.5;\r\n\r\n\t\tthis.locations[\"categoryX\"] = 0.5;\r\n\t\tthis.locations[\"categoryY\"] = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A column used to draw a column for this data item.\r\n\t *\r\n\t * @param column\r\n\t */\r\n\tpublic set column(column: this[\"_column\"]) {\r\n\t\tthis.setColumn(column);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Column\r\n\t */\r\n\tpublic get column(): this[\"_column\"] {\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tprotected setColumn(column: this[\"_column\"]) {\r\n\t\tif (this._column && column != this._column) {\r\n\t\t\t$array.remove(this.sprites, this._column);\r\n\t\t}\r\n\t\tthis._column = column;\r\n\r\n\t\tif (column) {\r\n\t\t\tlet prevDataItem: ColumnSeriesDataItem = column.dataItem;\r\n\t\t\tif (prevDataItem && prevDataItem != this) {\r\n\t\t\t\tprevDataItem.column = undefined;\r\n\t\t\t}\r\n\t\t\tthis.addSprite(column);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\t// TODO investigate why component is undefined\r\n\t\t\t\t// https://codepen.io/team/amcharts/pen/dac4be245d658233a6d7e5597df2208b?editors=0010\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.columns.removeValue(column);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t */\r\n\tpublic get rangesColumns(): Dictionary {\r\n\t\tif (!this._rangesColumns) {\r\n\t\t\tthis._rangesColumns = new Dictionary();\r\n\t\t}\r\n\t\treturn this._rangesColumns;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tclustered?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeriesAdapters extends IXYSeriesAdapters, IColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a column graph.\r\n *\r\n * @see {@link IColumnSeriesEvents} for a list of available Events\r\n * @see {@link IColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries extends XYSeries {\r\n\t/**\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: ColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of column elements.\r\n\t */\r\n\tprotected _columns: ListTemplate;\r\n\r\n\t/**\r\n\t * Container to put column elements in.\r\n\t */\r\n\tprotected _columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Start location within cell for columns.\r\n\t */\r\n\tprotected _startLocation: number = 0;\r\n\r\n\t/**\r\n\t * End location within cell for columns.\r\n\t */\r\n\tprotected _endLocation: number = 1;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t */\r\n\tprotected _dropFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t */\r\n\tprotected _dropFromPreviousState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t */\r\n\tprotected _riseFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t */\r\n\tprotected _riseFromPreviousState: SpriteState;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\t\tthis.fillOpacity = 1;\r\n\r\n\t\tthis.clustered = true;\r\n\r\n\t\tlet columnsContainer = this.mainContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis._columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columns;\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = 0; i < this.startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tfor (let i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.yAxis.axisLength;\r\n\r\n\t\t\tif ((t < 0 && b < 0) || (t > axisLenght && b > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\r\n\t\t\tif (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// horizontal bars\r\n\t\telse {\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet rightLocation = dataItem.locations[xField];\r\n\t\t\tlet leftLocation = dataItem.locations[xOpenField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.xAxis instanceof ValueAxis) {\r\n\t\t\t\trightLocation = 0;\r\n\t\t\t\tleftLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, rightLocation);\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.xAxis.axisLength;\r\n\r\n\t\t\tif ((r < 0 && l < 0) || (r > axisLenght && l > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\r\n\t\t\tif (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet w: number = Math.abs(r - l);\r\n\t\tlet h: number = Math.abs(b - t);\r\n\r\n\t\tlet x: number = Math.min(l, r);\r\n\t\tlet y: number = Math.min(t, b);\r\n\r\n\t\tif (!outOfBounds) {\r\n\t\t\tlet column: this[\"_column\"];\r\n\t\t\tif (!dataItem.column) {\r\n\t\t\t\tcolumn = this.columns.create();\r\n\t\t\t\t//$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n\t\t\t\t$object.copyProperties(this, column, visualProperties); // need this because 3d columns are not in the same container\r\n\t\t\t\t$object.copyProperties(this.columns.template, column, visualProperties); // second time, no force, so that columns.template would override series properties\r\n\t\t\t\tdataItem.addSprite(column);\r\n\r\n\t\t\t\tdataItem.column = column;\r\n\r\n\t\t\t\t// accessibility\r\n\t\t\t\tif (this.itemsFocusable()) {\r\n\t\t\t\t\tcolumn.role = \"menuitem\";\r\n\t\t\t\t\tcolumn.focusable = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcolumn.role = \"listitem\";\r\n\t\t\t\t\tcolumn.focusable = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (column.focusable) {\r\n\t\t\t\t\tcolumn.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t\tif (column.hoverable) {\r\n\t\t\t\t\tcolumn.events.once(\"over\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"out\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn = dataItem.column;\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.width = w;\r\n\t\t\tcolumn.height = h;\r\n\r\n\t\t\tcolumn.x = x;\r\n\t\t\tcolumn.y = y;\r\n\r\n\t\t\tcolumn.realX = l;\r\n\t\t\tcolumn.realY = t;\r\n\r\n\t\t\tcolumn.realWidth = r - l;\r\n\t\t\tcolumn.realHeight = b - t;\r\n\r\n\t\t\tcolumn.parent = this.columnsContainer;\r\n\t\t\tcolumn.virtualParent = this;\r\n\r\n\t\t\tthis.setColumnStates(column);\r\n\r\n\t\t\tif (column.invalid) {\r\n\t\t\t\tcolumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.__disabled = false;\r\n\t\t\t//column.returnAfterTemp();\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: this[\"_column\"] = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t//$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\r\n\t\t\t\trangeColumn.width = w;\r\n\t\t\t\trangeColumn.height = h;\r\n\t\t\t\trangeColumn.x = x;\r\n\t\t\t\trangeColumn.y = y;\r\n\r\n\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\r\n\t\t\t\tif (rangeColumn.invalid) {\r\n\t\t\t\t\trangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\t//rangeColumn.returnAfterTemp();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tdataItem.itemWidth = w;\r\n\t\tdataItem.itemHeight = h;\r\n\t}\r\n\r\n\r\n\tdisableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\tdataItem.column.width = 0;\r\n\t\t\t\tdataItem.column.height = 0;\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t * @param value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.fill;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.columns.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { TreeMap, TreeMapDataItem } from \"../types/TreeMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../../core/Container\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Data for the this particular item.\r\n\t *\r\n\t * @param value Item's data\r\n\t */\r\n\t//public set dataContext(value: Object) {\r\n\t//\tthis._dataContext = value;\r\n\t//}\r\n\r\n\r\n\r\n\t/**\r\n\t * @return Item's data\r\n\t */\r\n\t/*\r\n public get dataContext(): Object {\r\n\t // It's because data of tree series is TreeMapDataItems.\r\n\t if (this._dataContext) {\r\n\t\t return (this._dataContext).dataContext;\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * The name of the item's parent item.\r\n\t *\r\n\t * @return Parent name\r\n\t */\r\n\tpublic get parentName(): string {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem && treeMapDataItem.parent) {\r\n\t\t\treturn treeMapDataItem.parent.name;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value.\r\n\t *\r\n\t * @readonly\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\treturn this.treeMapDataItem.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn this._dataContext;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\tlet animation = super.showReal(interpolationDuration);\r\n\t\tlet chart = this.chart;\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of fade out (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet animation = super.hideReal(interpolationDuration);\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t})\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate(){\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/TreeMapSeries.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Series of children data items.\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a duration (ms) the Data Item should take to animate from one\r\n\t * value to another.\r\n\t *\r\n\t * If the duration is not specified via parameter, this method will try to\r\n\t * request a default duration from the related `Component`.\r\n\t *\r\n\t * @param duration Default duration (ms)\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic getDuration(): number {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\r\n\t\tlet value = 0;\r\n\t\tif (!this.children || this.children.length == 0) {\r\n\t\t\tvalue = this.values[\"value\"].workingValue;\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\tlet childValue = child.value;\r\n\t\t\t\tif ($type.isNumber(childValue)) {\r\n\t\t\t\t\tvalue += childValue;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t\t/*\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;*/\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * Series of children data items\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (series != this._series) {\r\n\t\t\tif (this._series) {\r\n\t\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\t\tthis._series.dispose();\r\n\t\t\t}\r\n\t\t\tthis._series = series;\r\n\t\t\tthis._disposers.push(series);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMap]].\r\n */\r\nexport interface ITreeMapDataFields extends IXYChartDataFields {\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum levels the chart will allow drilling down to.\r\n\t *\r\n\t * @default 2\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied automatically to each new chart item, if\r\n\t * not explicitly set.\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = (maxX * this.pixelHeight / this.pixelWidth) || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateDataItemIndexes(0);\r\n\r\n\t\t\tthis.layoutAlgorithm(parent);\r\n\r\n\t\t\tfor (let i = 0, len = children.length; i < len; i++) {\r\n\r\n\t\t\t\tlet node = children.getIndex(i);\r\n\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\tthis.layoutItems(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates and returns a new treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum drill-down levels the chart will allow going to.\r\n\t *\r\n\t * If set, the chart will not drill-down further, even if there are sub-items\r\n\t * available.\r\n\t *\r\n\t * Set to `1` to disable drill down functionality.\r\n\t *\r\n\t * @param value Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param value Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param value Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t * this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t * notice,this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t * contributors may be used to endorse or promote products derived from\r\n\t * this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0, node.y0 = y0;\r\n\t\t\t\tnode.x1 = x1, node.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) k = mid + 1;\r\n\t\t\t\telse hi = mid;\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)--k;\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.x0 = x0, node.x1 = x1;\r\n\t\t\tnode.y0 = y0, node.y1 = y0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.y0 = y0, node.y1 = y1;\r\n\t\t\tnode.x0 = x0, node.x1 = x0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tparent.level & 1 ? this.slice(parent) : this.dice(parent);\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0, dy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo sumValue = nodes.getIndex(i1++).value; while (!sumValue && i1 < n);\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? y0 += dy * sumValue / value : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? x0 += dx * sumValue / value : x1, y1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue, i0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DProperties extends IAxisRendererXProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DEvents extends IAxisRendererXEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererX3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererX3DAdapters extends IAxisRendererXAdapters, IAxisRendererX3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for horizontal 3D axis.\r\n *\r\n * @see {@link IAxisRendererX3DEvents} for a list of available events\r\n * @see {@link IAxisRendererX3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererX3D extends AxisRendererX {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererX3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererX3D\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D;\r\n\t\tlet dy = this.chart.dy3D;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\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[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DProperties extends IAxisRendererYProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererY3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererY3DAdapters extends IAxisRendererYAdapters, IAxisRendererY3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for vertical 3D axis.\r\n *\r\n * @see {@link IAxisRendererY3DEvents} for a list of available events\r\n * @see {@link IAxisRendererY3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererY3D extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererY3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererY3D\";\r\n\t\tthis._disposers.push(this._chart);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w + this.chart.dx3D, y: this.chart.dy3D });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nexport class ColumnSeries3DDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DProperties extends IColumnSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeries3DAdapters extends IColumnSeriesAdapters, IColumnSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries3D extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tif (this.chart && this.chart.columnsContainer) {\r\n\t\t\treturn this.chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif(dataItem.column){\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif(this.chart){\r\n\t\t\tthis.chart.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the layout (padding and scrollbar positions) to accommodate for\r\n\t * 3D depth and angle.\r\n\t */\r\n\tprotected fixLayout(): void {\r\n\r\n\t\tthis.chartContainer.marginTop = -this.dy3D;\r\n\t\tthis.chartContainer.paddingRight = this.dx3D;\r\n\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.scrollbarX.dy = this.dy3D;\r\n\t\t\tthis.scrollbarX.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.scrollbarY.dy = this.dy3D;\r\n\t\t\tthis.scrollbarY.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tthis.fixColumns();\r\n\r\n\t\tsuper.fixLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count );\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\r\n\t\t\t\tlet i: number = 1;\r\n\t\t\t\tseries.columns.each((column) => {\r\n\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Candlestick]].\r\n */\r\nexport interface ICandlestickProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Candlestick]].\r\n */\r\nexport interface ICandlestickEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Candlestick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickAdapters extends IColumnAdapters, ICandlestickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Candlesticks.\r\n *\r\n * @see {@link ICandlestickEvents} for a list of available events\r\n * @see {@link ICandlestickAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Candlestick extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t */\r\n\tpublic highLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Candlestick\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tsuper.createAssets();\r\n\r\n\t\tthis.lowLine = this.createChild(Line);\r\n\t\tthis.lowLine.shouldClone = false;\r\n\r\n\t\tthis.highLine = this.createChild(Line);\r\n\t\tthis.highLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Candlestick]].\r\n\t *\r\n\t * @param source Source Candlestick\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.lowLine) {\r\n\t\t\tthis.lowLine.copyFrom(source.lowLine);\r\n\t\t}\r\n\t\tif (this.highLine) {\r\n\t\t\tthis.highLine.copyFrom(source.highLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\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[\"Candlestick\"] = Candlestick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Candlestick.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t */\r\n\thighDateY?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]) {\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet yAxisFieldName: string = $utils.capitalize(this.yAxis.axisFieldName);\r\n\t\t\tthis._yLowField = <$type.Keyof>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\tthis._yHighField = <$type.Keyof>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t}\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet xAxisFieldName: string = $utils.capitalize(this.xAxis.axisFieldName);\r\n\t\t\tthis._xLowField = <$type.Keyof>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\tthis._xHighField = <$type.Keyof>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t}\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xLowField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xHighField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yLowField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yHighField);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[OHLC]].\r\n */\r\nexport interface IOHLCProperties extends ICandlestickProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLC]].\r\n */\r\nexport interface IOHLCEvents extends ICandlestickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLC]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCAdapters extends ICandlestickAdapters, IOHLCProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates OHLCs.\r\n *\r\n * @see {@link IOHLCEvents} for a list of available events\r\n * @see {@link IOHLCAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class OHLC extends Candlestick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t */\r\n\tpublic highLowLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLC\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\t//super.createAssets();\r\n\r\n\t\tthis.openLine = this.createChild(Line);\r\n\t\tthis.openLine.shouldClone = false;\r\n\r\n\t\tthis.highLowLine = this.createChild(Line);\r\n\t\tthis.highLowLine.shouldClone = false;\r\n\r\n\t\tthis.closeLine = this.createChild(Line);\r\n\t\tthis.closeLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[OHLC]].\r\n\t *\r\n\t * @param source Source OHLC\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.openLine) {\r\n\t\t\tthis.openLine.copyFrom(source.openLine);\r\n\t\t}\r\n\t\tif (this.highLowLine) {\r\n\t\t\tthis.highLowLine.copyFrom(source.highLowLine);\r\n\t\t}\r\n\t\tif (this.closeLine) {\r\n\t\t\tthis.closeLine.copyFrom(source.closeLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\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[\"OHLC\"] = OHLC;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/OHLC.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesAdapters, ICandlestickSeriesEvents } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class OHLCSeriesDataItem extends CandlestickSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the OHLC elements.\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: OHLCSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"OHLCSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesDataFields extends ICandlestickSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesProperties extends ICandlestickSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesEvents extends ICandlestickSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLCSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCSeriesAdapters extends ICandlestickSeriesAdapters, IOHLCSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class OHLCSeries extends CandlestickSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: OHLCSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\topenLine.y1 = yOpen - pixelY;\r\n\t\t\t\topenLine.y2 = yOpen - pixelY;\r\n\t\t\t\topenLine.x1 = 0;\r\n\t\t\t\topenLine.x2 = x;\r\n\r\n\t\t\t\tcloseLine.y1 = yClose - pixelY;\r\n\t\t\t\tcloseLine.y2 = yClose - pixelY;\r\n\t\t\t\tcloseLine.x1 = x;\r\n\t\t\t\tcloseLine.x2 = 2 * x;\r\n\r\n\t\t\t\thighLowLine.y1 = yHigh - pixelY;\r\n\t\t\t\thighLowLine.y2 = yLow - pixelY;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\thighLowLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\topenLine.x1 = xOpen - pixelX;\r\n\t\t\t\topenLine.x2 = xOpen - pixelX;\r\n\t\t\t\topenLine.y1 = y;\r\n\t\t\t\topenLine.y2 = 2 * y;\r\n\r\n\t\t\t\tcloseLine.x1 = xClose - pixelX;\r\n\t\t\t\tcloseLine.x2 = xClose - pixelX;\r\n\t\t\t\tcloseLine.y1 = 0;\r\n\t\t\t\tcloseLine.y2 = y;\r\n\r\n\t\t\t\thighLowLine.x1 = xHigh - pixelX;\r\n\t\t\t\thighLowLine.x2 = xLow - pixelX;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeOpenLine = rangeColumn.openLine;\r\n\t\t\t\t\trangeOpenLine.x = openLine.x;\r\n\t\t\t\t\trangeOpenLine.y = openLine.y;\r\n\t\t\t\t\trangeOpenLine.x1 = openLine.x1;\r\n\t\t\t\t\trangeOpenLine.x2 = openLine.x2;\r\n\t\t\t\t\trangeOpenLine.y1 = openLine.y1;\r\n\t\t\t\t\trangeOpenLine.y2 = openLine.y2;\r\n\r\n\t\t\t\t\tlet rangeCloseLine = rangeColumn.closeLine;\r\n\t\t\t\t\trangeCloseLine.x = closeLine.x;\r\n\t\t\t\t\trangeCloseLine.y = closeLine.y;\r\n\t\t\t\t\trangeCloseLine.x1 = closeLine.x1;\r\n\t\t\t\t\trangeCloseLine.x2 = closeLine.x2;\r\n\t\t\t\t\trangeCloseLine.y1 = closeLine.y1;\r\n\t\t\t\t\trangeCloseLine.y2 = closeLine.y2;\r\n\r\n\t\t\t\t\tlet rangeHighLowLine = rangeColumn.highLowLine;\r\n\t\t\t\t\trangeHighLowLine.x = highLowLine.x;\r\n\t\t\t\t\trangeHighLowLine.y = highLowLine.y;\r\n\t\t\t\t\trangeHighLowLine.x1 = highLowLine.x1;\r\n\t\t\t\t\trangeHighLowLine.x2 = highLowLine.x2;\r\n\t\t\t\t\trangeHighLowLine.y1 = highLowLine.y1;\r\n\t\t\t\t\trangeHighLowLine.y2 = highLowLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: OHLC = marker.createChild(OHLC);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet openLine: Line = column.openLine;\r\n\t\tlet closeLine: Line = column.closeLine;\r\n\t\tlet highLowLine: Line = column.highLowLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLowLine.y = h / 2;\r\n\t\t\thighLowLine.x2 = w;\r\n\r\n\t\t\topenLine.x = w / 3 * 2;\r\n\t\t\topenLine.y2 = h / 2;\r\n\r\n\t\t\tcloseLine.x = w / 3;\r\n\t\t\tcloseLine.y2 = h;\r\n\t\t\tcloseLine.y1 = h / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\r\n\t\t\thighLowLine.x = w / 2;\r\n\t\t\thighLowLine.y2 = h;\r\n\r\n\t\t\topenLine.y = h / 3 * 2;\r\n\t\t\topenLine.x2 = w / 2;\r\n\r\n\t\t\tcloseLine.y = h / 3;\r\n\t\t\tcloseLine.x2 = w;\r\n\t\t\tcloseLine.x1 = w / 2;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.stroke;\r\n\t\tlegendDataItem.colorOrig = column.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new OHLC();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/OHLCSeries.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ILineSeriesSegmentAdapters, ILineSeriesSegmentEvents, ILineSeriesSegmentProperties, LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentProperties extends ILineSeriesSegmentProperties { }\r\n\r\n/**\r\n * Defines events for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentEvents extends ILineSeriesSegmentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesSegmentAdapters extends ILineSeriesSegmentAdapters, IStepLineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class StepLineSeriesSegment extends LineSeriesSegment {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesSegment\";\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points Points to connect\r\n\t * @param closePoints ?\r\n\t * @param smoothnessX Horizontal bezier setting (?)\r\n\t * @param smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number, noRisers?: boolean, vertical?: boolean): void {\r\n\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\r\n\t\t\tif (noRisers) {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]);\r\n\t\t\t\tif (points.length > 0) {\r\n\t\t\t\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\t\t\t\tlet point = points[i];\r\n\t\t\t\t\t\tif (i / 2 == Math.round(i / 2)) {\r\n\t\t\t\t\t\t\tpath += $path.moveTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tpath += $path.lineTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath = $path.moveTo(points[0]) + $path.polyline(points);\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]) + $path.polyline(points);\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","/**\r\n * Step line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class StepLineSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: StepLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesProperties extends ILineSeriesProperties {\r\n\tnoRisers?: boolean;\r\n\r\n\tstartLocation?: number;\r\n\r\n\tendLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesAdapters extends ILineSeriesAdapters, IStepLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class StepLineSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: StepLineSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: StepLineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeries\";\r\n\t\tthis.applyTheme();\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new StepLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocation);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocation);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocation);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty0 = $math.fitToRange(y0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\tx1 = $math.fitToRange(x1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty1 = $math.fitToRange(y1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers && this.connect) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment Segment\r\n\t * @param points Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param value No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnAdapters extends IColumnAdapters, IRadarColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates RadarColumns.\r\n *\r\n * @see {@link IRadarColumnEvents} for a list of available events\r\n * @see {@link IRadarColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class RadarColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t */\r\n\tpublic radarColumn: Slice;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.radarColumn = this.createChild(Slice);\r\n\t\tthis.radarColumn.shouldClone = false;\r\n\t\tthis.radarColumn.strokeOpacity = undefined;\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.radarColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[RadarColumn]].\r\n\t *\r\n\t * @param source Source RadarColumn\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.radarColumn) {\r\n\t\t\tthis.radarColumn.copyFrom(source.radarColumn);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return X\r\n\t */\r\n\tprotected getTooltipX(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipX;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return Y\r\n\t */\r\n\tprotected getTooltipY(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipY;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n}\r\n\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[\"RadarColumn\"] = RadarColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/RadarColumn.ts","/**\r\n * Radar column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\r\n\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\tpercentWidth = 100;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.sum;\r\n\r\n\t\tif(sum == 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\tlet nextValue = this.getNextValue(dataItem);\r\n\t\tlet workingValue = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet sum = this.dataItem.values.value.sum;\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / dataItem.value;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / dataItem.value;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\tpicture?: Sprite;\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif(scale == Infinity){\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight;\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth;\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tthis.slicesContainer.mask = this._maskSprite;\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * \"type\": \"PictorialStackedSeries\",\r\n\t * // ...\r\n\t * \"maskSprite\": {\r\n\t * \"path\": iconPath\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\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[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\tlet ww = this.width;\r\n\t\tlet pw = 0.8;\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t *\r\n\t * @param source Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\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[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","/**\r\n * CurvedColumnSeries module.\r\n *\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Dfines type of the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * DurationAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DurationAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DurationAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisDataFields extends IValueAxisDataFields { }\r\n\r\n/**\r\n * Defines properties for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisProperties extends IValueAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DurationAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDurationAxisAdapters extends IValueAxisAdapters, IDurationAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create an axis that shows time durations.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DurationAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information about duration formatters.\r\n * @see {@link IDurationAxisEvents} for a list of available Events\r\n * @see {@link IDurationAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DurationAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDurationAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDurationAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DurationAxisDataItem;\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t */\r\n\tprotected _baseUnit: TimeUnit = \"second\";\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\tprotected _tooltipDurationFormat: string;\r\n\r\n\t/**\r\n\t * Axis date format chosen dynamically based on min/max and baseUnit.\r\n\t *\r\n\t * @readonly\r\n\t */\r\n\tpublic axisDurationFormat: string;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"maxZoomFactor\", 1000000);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DurationFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number, format?: string): string {\r\n\t\treturn this.durationFormatter.format(value, format || this.axisDurationFormat);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts actual min and max scale values so that the axis starts and ends\r\n\t * at \"nice\" values, unless `strictMinMax` is set.\r\n\t *\r\n\t * The `difference` can be something else than `max - min`, because of the\r\n\t * axis breaks.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param min [description]\r\n\t * @param max [description]\r\n\t * @param difference [description]\r\n\t * @param gridCount [description]\r\n\t * @param strictMode [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number, difference: number, gridCount: number, strictMode?: boolean): IMinMaxStep {\r\n\r\n\t\tlet minMaxStep: IMinMaxStep;\r\n\r\n\t\tlet timeUnit = this.baseUnit;\r\n\t\t// we don't allow to go to smaller units, setting so to avoid invalidation\r\n\t\tthis.setPropertyValue(\"maxPrecision\", 0);\r\n\r\n\t\tif (timeUnit == \"millisecond\" || timeUnit == \"second\" || timeUnit == \"minute\" || timeUnit == \"hour\") {\r\n\t\t\t// will fail if 0\r\n\t\t\tif (gridCount <= 1) {\r\n\t\t\t\tgridCount = 1;\r\n\t\t\t}\r\n\r\n\t\t\tgridCount = Math.round(gridCount);\r\n\r\n\t\t\tlet initialMin: number = min;\r\n\t\t\tlet initialMax: number = max;\r\n\r\n\t\t\t// in case min and max is the same, use max\r\n\t\t\tif (difference === 0) {\r\n\t\t\t\tdifference = Math.abs(max);\r\n\t\t\t}\r\n\r\n\t\t\tlet step = difference / gridCount;\r\n\r\n\t\t\tlet divisors = [60, 30, 20, 15, 10, 2, 1];\r\n\t\t\tlet realDivisor = 1;\r\n\r\n\t\t\tif (timeUnit == \"hour\") {\r\n\t\t\t\tdivisors = [24, 12, 6, 4, 2, 1];\r\n\t\t\t}\r\n\r\n\t\t\tfor (let divisor of divisors) {\r\n\t\t\t\tif (difference / divisor > gridCount) {\r\n\t\t\t\t\trealDivisor = divisor;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet count = Math.ceil(((max - min) / realDivisor) / gridCount);\r\n\r\n\t\t\tlet exponent: number = Math.log(Math.abs(count)) * Math.LOG10E;\r\n\t\t\tlet power = Math.pow(10, Math.floor(exponent)) / 10;\r\n\t\t\tlet reducedCount = count / power;\r\n\r\n\t\t\t// find closest to divisor\r\n\t\t\tlet closest = $math.closest(divisors, reducedCount);\r\n\t\t\tcount = closest * power;\r\n\r\n\t\t\tstep = realDivisor * count;\r\n\r\n\t\t\tlet unit = this.durationFormatter.getValueUnit(step, this.baseUnit);\r\n\r\n\t\t\tmin = Math.floor(min / step) * step;\r\n\t\t\tmax = Math.ceil(max / step) * step;\r\n\r\n\t\t\tif (strictMode) {\r\n\t\t\t\tmin -= step;\r\n\t\t\t\tif (min < 0 && initialMin >= 0) {\r\n\t\t\t\t\tmin = 0;\r\n\t\t\t\t}\r\n\t\t\t\tmax += step;\r\n\r\n\t\t\t\tif (max > 0 && initialMax <= 0) {\r\n\t\t\t\t\tmax = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tminMaxStep = { min: min, max: max, step: step };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tminMaxStep = super.adjustMinMax(min, max, difference, gridCount, strictMode);\r\n\t\t}\r\n\r\n\t\t// choose duration formatter based on step\r\n\t\tthis.axisDurationFormat = this.durationFormatter.getFormat(minMaxStep.step, minMaxStep.max, this.baseUnit);\r\n\r\n\t\treturn minMaxStep;\r\n\t}\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information.\r\n\t * @param value Duration format for axis labels\r\n\t */\r\n\tpublic set tooltipDurationFormat(value: string) {\r\n\t\tthis._tooltipDurationFormat = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Duration format for axis labels\r\n\t */\r\n\tpublic get tooltipDurationFormat(): string {\r\n\t\treturn this._tooltipDurationFormat;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a axis tooltip, based on specific position within\r\n\t * axis.\r\n\t *\r\n\t * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (numeric value)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet value: number = $math.round(this.positionToValue(position), this._stepDecimalPlaces);\r\n\t\treturn this.adapter.apply(\"getTooltipText\", this.formatLabel(value, this.tooltipDurationFormat));\r\n\t}\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * Available options: \"millisecond\", \"second\" (default), \"minute\", \"hour\",\r\n\t * \"day\", \"week\", \"month\", \"year\".\r\n\t *\r\n\t * @default \"second\"\r\n\t * @param timeUnit\r\n\t */\r\n\tpublic set baseUnit(timeUnit: TimeUnit) {\r\n\t\tif (this._baseUnit != timeUnit) {\r\n\t\t\tthis._baseUnit = timeUnit;\r\n\t\t\tthis.durationFormatter.baseUnit = timeUnit;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base unit\r\n\t */\r\n\tpublic get baseUnit(): TimeUnit {\r\n\t\treturn this._baseUnit;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.baseUnit = source.baseUnit;\r\n\t}\r\n}\r\n\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[\"DurationAxis\"] = DurationAxis;\r\nregistry.registeredClasses[\"DurationAxisDataItem\"] = DurationAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DurationAxis.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ICircleBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ICircleBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICircleBulletAdapters extends IBulletAdapters, ICircleBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class CircleBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICircleBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CircleBullet\";\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.radius = 5;\r\n\t\tcircle.isMeasured = false;\r\n\t\tthis.circle = circle;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[CircleBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.circle.copyFrom(source.circle);\r\n\t}\r\n}\r\n\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[\"CircleBullet\"] = CircleBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CircleBullet.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface IErrorBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface IErrorBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface IErrorBulletAdapters extends IBulletAdapters, IErrorBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ErrorBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IErrorBulletEvents;\r\n\r\n\tpublic errorLine:Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ErrorBullet\";\r\n\t\tthis.errorLine = this.createChild(Sprite);\r\n\t\tthis.errorLine.shouldClone = false;\r\n\t\tthis.width = 20;\r\n\t\tthis.height = 20;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.isDynamic = true;\r\n\t}\r\n\r\n\r\n\tvalidatePosition(){\r\n\t\tsuper.validatePosition();\r\n\t\tlet w = this.pixelWidth / 2;\r\n\t\tlet h = this.pixelHeight / 2;\r\n\r\n\t\tthis.errorLine.path = $path.moveTo({x:-w, y:-h}) + $path.lineTo({x:w, y:-h}) + $path.moveTo({x:0, y:-h}) + $path.lineTo({x:0, y:h}) + $path.moveTo({x:-w, y:h}) + $path.lineTo({x:w, y:h});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[ErrorBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.errorLine.copyFrom(source.errorLine);\r\n\t}\r\n}\r\n\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[\"ErrorBullet\"] = ErrorBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ErrorBullet.ts","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component, IComponentProperties, IComponentAdapters, IComponentEvents, IComponentDataFields } from \"../../core/Component\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { TextLink } from \"../../core/elements/TextLink\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class NavigationBarDataItem extends DataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: NavigationBar;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBarDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Name of the navigation bar item.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setProperty(\"name\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties[\"name\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarDataFields extends IComponentDataFields {\r\n\r\n\t/**\r\n\t * Name of nav var item.\r\n\t */\r\n\tname?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarProperties extends IComponentProperties {\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarEvents extends IComponentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[NavigationBar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface INavigationBarAdapters extends IComponentAdapters, INavigationBarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * NavigationBar class can be used to create a multi-level breadcrumb-style\r\n * navigation control.\r\n *\r\n * @see {@link INavigationBarEvents} for a list of available events\r\n * @see {@link INavigationBarAdapters} for a list of available Adapters\r\n * @todo Implement better\r\n * @important\r\n */\r\nexport class NavigationBar extends Component {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: INavigationBarEvents;\r\n\r\n\t/**\r\n\t * A list of breadcrumbs (links) in the nav bar.\r\n\t */\r\n\tpublic links: ListTemplate;\r\n\r\n\t/**\r\n\t * [_linksIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _linksIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * [_separatorsIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _separatorsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * A reference to the link which is currently active.\r\n\t */\r\n\tpublic activeLink: TextLink;\r\n\r\n\t/**\r\n\t * A list of elements used as nav bar item separators.\r\n\t */\r\n\tpublic separators: ListTemplate;\r\n\r\n\t/**\r\n\t * Identifies the type of the [[DataItem]] used in this element.\r\n\t */\r\n\tpublic _dataItem!: NavigationBarDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet textLink = new TextLink();\r\n\t\ttextLink.valign = \"middle\";\r\n\t\ttextLink.paddingTop = 8;\r\n\t\ttextLink.paddingBottom = 8;\r\n\r\n\t\tthis.paddingBottom = 2;\r\n\r\n\t\tthis.links = new ListTemplate(textLink);\r\n\t\tthis._disposers.push(new ListDisposer(this.links));\r\n\t\tthis._disposers.push(textLink);\r\n\r\n\t\tthis._linksIterator = new $iter.ListIterator(this.links, () => this.links.create());\r\n\t\tthis._linksIterator.createNewItems = true;\r\n\r\n\t\tlet triangle = new Triangle();\r\n\t\ttriangle.direction = \"right\";\r\n\t\ttriangle.width = 8;\r\n\t\ttriangle.height = 12;\r\n\t\ttriangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\ttriangle.fillOpacity = 0.5;\r\n\t\ttriangle.valign = \"middle\";\r\n\t\ttriangle.marginLeft = 10;\r\n\t\ttriangle.marginRight = 10;\r\n\r\n\t\tthis.separators = new ListTemplate(triangle);\r\n\t\tthis._disposers.push(new ListDisposer(this.separators));\r\n\t\tthis._disposers.push(triangle);\r\n\r\n\t\tlet activeLink = new TextLink();\r\n\t\tthis.activeLink = activeLink;\r\n\t\tactiveLink.copyFrom(textLink);\r\n\t\tactiveLink.valign = \"middle\";\r\n\t\tactiveLink.fontWeight = \"bold\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.layout = \"grid\";\r\n\t\tthis.dataFields.name = \"name\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Completely redraws the navigation bar.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tthis.removeChildren();\r\n\t\tthis._linksIterator.reset();\r\n\t\tsuper.validateDataElements();\r\n\t\t//@todo: dispose\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a visual element for a data item (nav item).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tlet textLink: TextLink;\r\n\t\tif (dataItem.index < this.dataItems.length - 1) {\r\n\t\t\ttextLink = this._linksIterator.getLast();\r\n\t\t\ttextLink.parent = this;\r\n\t\t\tlet separator = this.separators.create();\r\n\t\t\tseparator.parent = this;\r\n\t\t\tseparator.valign = \"middle\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttextLink = this.activeLink;\r\n\t\t\ttextLink.events.copyFrom(this.links.template.events);\r\n\t\t\ttextLink.hide(0);\r\n\t\t\ttextLink.show();\r\n\t\t\ttextLink.parent = this;\r\n\t\t}\r\n\t\ttextLink.dataItem = dataItem;\r\n\t\ttextLink.text = dataItem.name;\r\n\t\ttextLink.validate();\r\n\t}\r\n}\r\n\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[\"NavigationBar\"] = NavigationBar;\r\nregistry.registeredClasses[\"NavigationBarDataItem\"] = NavigationBarDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/NavigationBar.ts","import * as m from \"../es2015/charts\";\nwindow.am4charts = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./charts.js\n// module id = null\n// module chunks = ","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Grid, IGridProperties, IGridAdapters, IGridEvents } from \"./Grid\";\r\nimport { Axis, AxisItemLocation } from \"./Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[GridCircular]].\r\n */\r\nexport interface IGridCircularProperties extends IGridProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[GridCircular]].\r\n */\r\nexport interface IGridCircularEvents extends IGridEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GridCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGridCircularAdapters extends IGridAdapters, IGridCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a circular grid element for circular-type axis.\r\n *\r\n * @see {@link IGridCircularEvents} for a list of available events\r\n * @see {@link IGridCircularAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the GridCircular, also with 3d charts we might need some additional elements\r\n */\r\nexport class GridCircular extends Grid {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGridCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGridCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGridCircularEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GridCircular\";\r\n\t\tthis.pixelPerfect = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n}\r\n\r\n\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[\"GridCircular\"] = GridCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/GridCircular.ts"],"sourceRoot":""}