{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisLabelCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.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/types/PercentChart.ts","webpack:///../../../../../src/.internal/charts/elements/PieTick.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries.ts","webpack:///../../../../../src/.internal/charts/types/PieChart.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","AxisLabelCircular","__WEBPACK_IMPORTED_MODULE_1__AxisLabel__","__WEBPACK_IMPORTED_MODULE_2__core_Registry__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Utils__","fdx","fdy","padding","axisRadius","sign","pixelRadiusY","axisRadiusY","dx","dy","isNegative","realRadius","relativeRotation","labelRadius","horizontalCenter","verticalCenter","pixelWidth","bbox","width","pixelHeight","height","pixelPaddingBottom","pixelPaddingTop","pixelPaddingLeft","pixelPaddingRight","rotation","dH","dW","_measuredHeight","_measuredWidth","moveTo","AxisFillCircular","paper","__WEBPACK_IMPORTED_MODULE_2__core_utils_Percent__","draw","fillPath","__WEBPACK_IMPORTED_MODULE_1__AxisFill__","__WEBPACK_IMPORTED_MODULE_3__core_Registry__","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","tslib_es6","indexToPosition","adjustedStartValue","adjustedEndValue","invalidateDataItems","category","categoryToIndex","AxisBreak","Registry","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","text","locations","endCategory","isEnabled","apply","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","Dictionary","axisFieldName","_lastDataItem","createDataItem","component","_disposers","push","createAxisBreak","validateDataRange","Iterator","_series","iterator","series","xAxis","yAxis","invalidateDataRange","firstSeriesDataItem","getSeriesDataItem","lastSeriesDataItem","startIndex","index","endIndex","axisBreaks","dataCount","dataItems","utils_Math","floor","ceil","maxCount","minGridDistance","frequency","min","_startIndex","_endIndex","fixAxisBreaks","_frequency","maxZoomFactor","resetIterators","itemIndex","i","dataItem","getIndex","__disabled","len","round","isInBreak","appendDataItem","validateDataElement","each","axisBreak","frequency_1","breakSize","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","Type","fillEndIndex","fillPosition","fillEndPosition","isRange","disabled","undefined","measuredWidth","measuredHeight","currentText","fill","axisFill","updateFillElement","fillRule","mask","processDataItem","dataContext","existingDataItem","getKey","remove","setKey","difference","adjustDifference","startLocation","endLocation","breakStartIndex","breakEndIndex","max","categoryToPosition","categoryToPoint","anyToPoint","anyToPosition","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","roundPosition","positionToIndex","last","sdi_1","category_1","seriesDataItem","categoryX","categoryY","dataItem_1","getX","key","categories","basePoint","getY","getAngle","stackKey","getCellStartPosition","getCellEndPosition","getTooltipText","breakStartPosition","breakEndPosition","breakPosition","getPositionLabel","initRenderer","baseGrid","DateAxisBreak_DateAxisBreak","DateAxisBreak","startValue","getTime","endValue","ValueAxisBreak","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","pushAll","gridInterval","_gridInterval","gridDuration","Time","applyInternalDefaults","hasKey","language","translate","validateDataItems","periodCount","baseDuration","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","_difference","baseAxis","field_1","getAxisField","findClosestIndex","validateData","minDifference","Number","MAX_VALUE","uid","seriesDataChangeUpdate","postProcessSeriesDataItems","JSON","stringify","_baseInterval","postProcessSeriesDataItem","addEmptyUnitsBreaks","dataItemsByAxis","utils_Object","time","getDate","startTime","setCalculatedValue","toString","skipEmptyPeriods","clear","startTimeStr","this_1","create","startDate","breakGridCount","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","this_2","format","markUnitChange","dateFormatter","find","renderer_1","timeUnit_1","intervalCount_1","startPoint","endPoint","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","valueToPosition","location_1","adjustMinMax","step","fixMin","fixMax","duration","gridCount","intervalDuration","lastIndex","formatLabel","dateToPosition","dateToPoint","valueToPoint","positionToDate","positionToValue","getTimeByLocation","baseValue","stack","getValue","workingLocations","endTime","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","abs","differece","updateAxisBySeries","timeInterval","invalidateData","breakTemplate","startLine","endLine","fillShape","tooltipDateFormat","dateFormat","findNearest","key_1","getCurrentLabelFormat","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","dateX","dateY","closestTime_1","seriesPoints_1","showTooltipAtDataItem","sortSeriesTooltips","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","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","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","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","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","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","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","dataInvalid","diff","axisRange","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","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","PercentChart_PercentChartDataItem","PercentChartDataItem","PercentChart_PercentChart","PercentChart","feedLegend","legend","legendData_1","hiddenInLegend","legendSettings","labelText","itemLabelText","valueText","valueLabels","itemValueText","PercentSeries","setLegend","itemContainers","PercentSeriesDataItem","slice","PieTick_PieTick","PieTick","_label","_slice","ix","scale","y0","iy","radiusY","y1","y2","alignLabels","r","attr","Tick","PieSeries_PieSeriesDataItem","PieSeriesDataItem","radiusValue","toValue","PieSeries_PieSeries","PieSeries","createSlice","Slice","createTick","initSlice","handleSliceScale","handleSliceMove","shiftRadius","togglable","_leftItems","_rightItems","_currentStartAngle","_arcRect","_maxRadiusPercent","radiusValuePercent","percent","reverse","aAngle","middleAngle","bAngle","arrangeLabels","normalizedMiddleAngle","arcRect","distance","depth","_pixelRadius","PieChart_PieChartDataItem","PieChartDataItem","PieChart_PieChart","PieChart","updateRadius","validateLayout","updateSeriesAngles","chartCont","chartRadius","chartPixelInnerRadius","seriesRadius","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries3D_PieSeries3D","PieSeries3D","Slice3D","depthPercent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","SlicedChart_SlicedChart","SlicedChart","ChordNode_ChordNode","ChordNode","updateRotation","setStateOnChildren","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","FlowDiagramNode","QuadraticCurve_QuadraticCurve","QuadraticCurve","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","t","percentHeight","paddingTop","paddingBottom","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","hasChildren","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","createTreeSeriesReal","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","currentlyZoomed","rangeChangeAnimation","_dataDisposers","binaryTree","dice","sliceDice","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","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","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","hs","expandDistance","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","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__"],"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\t * @type {number}\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\t * @type {number}\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\t * @type {number | 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\t * @type {number | 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\t * @type {boolean}\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\t * @type {IAxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererCircularEvents}\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\t * @type {GridCircular}\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\t * @type {AxisFillCircular}\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\t * @type {AxisLabelCircular}\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} 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 {number} 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 {number | Percent} 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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number | Percent} 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 {boolean} 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 {boolean} 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 {number} 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 {number} position Position (0-1)\r\n\t * @return {IPoint} 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 {number} position Position (0-1)\r\n\t * @return {number} 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 Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {AxisTick} tick Tick element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {IPoint} point Point coordinates\r\n\t * @return {boolean} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} 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 {GridCircular} 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 {AxisFillCircular} 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 {AxisLabelCircular} 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 {IPoint} point Point\r\n\t * @return {number} 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 * Axis Label module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisLabel, IAxisLabelProperties, IAxisLabelAdapters, IAxisLabelEvents } from \"./AxisLabel\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\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 [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularProperties extends IAxisLabelProperties {\r\n\r\n\t/**\r\n\t * Rotation angle of the label in relation to circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\trelativeRotation?: number;\r\n\r\n\t/**\r\n\t * Distance of the label from circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tradius?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularEvents extends IAxisLabelEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisLabelCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisLabelCircularAdapters extends IAxisLabelAdapters, IAxisLabelCircularProperties { }\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 * Use to create labels on circular axis.\r\n *\r\n * @see {@link IAxisLabelCircularEvents} for a list of available events\r\n * @see {@link IAxisLabelCircularAdapters} for a list of available Adapters\r\n */\r\nexport class AxisLabelCircular extends AxisLabel {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisLabelCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisLabelCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisLabelCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisLabelCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisLabelCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisLabelCircularEvents;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t *\r\n\t * @type {any}\r\n\t */\r\n\tpublic _dataItem: any;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdx: number = 0;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdy: number = 0;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisLabelCircular\";\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\t\tthis.location = 0.5;\r\n\t\tthis.radius = 0;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Relative rotation of the label.\r\n\t *\r\n\t * It is an angle to circle. In case 90, labels will be positioned like rays\r\n\t * of light, if 0 - positione along the circle.\r\n\t *\r\n\t * @param {number} value Rotation angle\r\n\t */\r\n\tpublic set relativeRotation(value: number) {\r\n\t\tthis.setPropertyValue(\"relativeRotation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Rotation angle\r\n\t */\r\n\tpublic get relativeRotation(): number {\r\n\t\treturn this.getPropertyValue(\"relativeRotation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Distance from axis circle to label in pixels or percent.\r\n\t *\r\n\t * @param {number} value Distance (px or percent)\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 {number} Distance (px)\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 * returns label radius in pixels\r\n\t */\r\n\tpublic pixelRadius(axisRadius: number): number {\r\n\t\tlet sign: number = 1;\r\n\t\tif (this.inside) {\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeToValue(this.radius, axisRadius) * sign;\r\n\t}\r\n\r\n\t/**\r\n\t * returns label radius in pixels\r\n\t */\r\n\tpublic pixelRadiusY(axisRadius: number, axisRadiusY: number): number {\r\n\t\tlet sign: number = 1;\r\n\t\tif (this.inside) {\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\tlet radius = this.radius;\r\n\r\n\t\tif ($type.isNumber(radius)) {\r\n\t\t\tradius *= axisRadiusY / axisRadius;\r\n\t\t\treturn $utils.relativeToValue(radius, axisRadius) * sign;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn $utils.relativeToValue(radius, axisRadiusY) * sign;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [fixPosition description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {IPoint} point Label affixation point\r\n\t * @param {number} axisRadius Distance from point (px)\r\n\t */\r\n\tpublic fixPosition(angle: number, axisRadius: number, axisRadiusY?: number, dx?: number, dy?: number) {\r\n\t\tif (!$type.isNumber(axisRadiusY)) {\r\n\t\t\taxisRadiusY = axisRadius;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(dx)) {\r\n\t\t\tdx = 0;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(dy)) {\r\n\t\t\tdy = 0;\r\n\t\t}\r\n\r\n\t\tlet point = { x: axisRadius * $math.cos(angle), y: axisRadiusY * $math.sin(angle) };\r\n\r\n\t\tif (this.invalid) {\r\n\t\t\tthis.validate(); //@todo\" check if we need this\r\n\t\t}\r\n\r\n\t\tlet isNegative = false;\r\n\t\tlet realRadius = this.radius;\r\n\r\n\t\tif (realRadius instanceof Percent && realRadius.value < 0) {\r\n\t\t\tisNegative = true;\r\n\t\t}\r\n\t\telse if (realRadius < 0) {\r\n\t\t\tisNegative = true;\r\n\t\t}\r\n\r\n\t\tlet relativeRotation = this.relativeRotation;\r\n\t\tlet labelRadius = this.pixelRadius(axisRadius);\r\n\r\n\t\t// WHEN ROTATED\r\n\t\tif ($type.isNumber(relativeRotation)) {\r\n\r\n\t\t\tthis.horizontalCenter = \"none\";\r\n\t\t\tthis.verticalCenter = \"none\";\t\t\t\r\n\r\n\t\t\tangle = $math.fitAngleToRange(angle, -180, 180);\r\n\r\n\t\t\tlet pixelWidth = this.bbox.width;\r\n\t\t\tlet pixelHeight = this.bbox.height;\r\n\r\n\t\t\tlet pixelPaddingBottom = this.pixelPaddingBottom;\r\n\t\t\tlet pixelPaddingTop = this.pixelPaddingTop;\r\n\t\t\tlet pixelPaddingLeft = this.pixelPaddingLeft;\r\n\t\t\tlet pixelPaddingRight = this.pixelPaddingRight;\t\t\t\r\n\r\n\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\trelativeRotation = 90;\r\n\t\t\t\t\tpixelWidth = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\tpixelHeight = - pixelHeight;\r\n\t\t\t\t}\r\n\t\t\t\tif (relativeRotation == 90) {\r\n\t\t\t\t\trelativeRotation = -90;\r\n\t\t\t\t\tpixelWidth = -pixelPaddingLeft - pixelPaddingRight;\r\n\t\t\t\t\tpixelHeight = - pixelHeight - pixelPaddingTop - pixelPaddingBottom;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.rotation = relativeRotation + angle + 90;\r\n\r\n\t\t\tlet dH = $math.sin(relativeRotation) / 2;\r\n\t\t\tlet dW = $math.cos(relativeRotation) / 2;\r\n\r\n\t\t\tlet rotation = this.rotation;\r\n\r\n\t\t\tthis.dx = pixelHeight * dH * $math.sin(rotation) - pixelWidth * dW * $math.cos(rotation);\r\n\t\t\tthis.dy = -pixelHeight * dH * $math.cos(rotation) - pixelWidth * dW * $math.sin(rotation);\r\n\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\tlabelRadius += (pixelHeight + pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelWidth + pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\t\tlabelRadius -= (pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlabelRadius += (pixelPaddingBottom + this.bbox.height + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight + this.bbox.width) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tpoint.x += $math.cos(angle) * labelRadius;\r\n\t\t\tpoint.y += $math.sin(angle) * labelRadius * axisRadiusY / axisRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// END OF ROTATED\r\n\t\t\tthis.horizontalCenter = \"middle\";\r\n\t\t\tthis.verticalCenter = \"middle\";\r\n\r\n\t\t\tif (isNegative) {\r\n\t\t\t\tthis.dx = 0;\r\n\t\t\t\tthis.dy = 0;\r\n\t\t\t\tpoint.x = (axisRadius + labelRadius) * $math.cos(angle);\r\n\t\t\t\tpoint.y = (axisRadiusY + labelRadius * axisRadiusY / axisRadius) * $math.sin(angle);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// we don't use valign for labels because then they would jump while animating. instead we modify dy depending on a y position\r\n\t\t\t\t// this math makes dy to be 1 at the top of the circle, 0.5 at the middle and 1 at the bottom\r\n\t\t\t\t// @todo with this math doesn't work well with inside = true\r\n\t\t\t\tthis.dy = this._measuredHeight / 2 * $math.sin(angle) //(1 - (point.y + axisRadiusY) / (2 * axisRadiusY));\r\n\t\t\t\t// simmilar with dx\r\n\t\t\t\tthis.dx = this._measuredWidth / 2 * $math.cos(angle) //(1 - (point.x + axisRadius) / (2 * axisRadius));\r\n\r\n\t\t\t\tpoint.x += $math.cos(angle) * labelRadius;\r\n\t\t\t\tpoint.y += $math.sin(angle) * labelRadius * axisRadiusY / axisRadius;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpoint.x += dx;\r\n\t\tpoint.y += dy;\r\n\r\n\t\tthis.fdx = this.dx;\r\n\t\tthis.fdy = this.dy;\r\n\r\n\t\tthis.moveTo(point);\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[\"AxisLabelCircular\"] = AxisLabelCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisLabelCircular.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\t * @type {number | Percent}\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\t * @type {number | Percent}\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\t * @type {number}\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\t * @type {IAxisFillCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisFillCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisFillCircularEvents}\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 * @type {string}\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 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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number} 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 {number} 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 {number} 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 * 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\t * @type {string}\r\n\t */\r\n\tstartCategory?: string;\r\n\r\n\t/**\r\n\t * Category break ends on.\r\n\t *\r\n\t * @type {string}\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\t * @type {ICategoryAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisBreakEvents}\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\t * @type {Axis}\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 {number} 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 {number} 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 {string} 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 {string} 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 {string} 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 {string} 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 {number} 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 {number} 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 {number} 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 {number} 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 { 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\t * @type {CategoryAxis}\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t *\r\n\t * @type {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 {string} 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 {string} 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 {string} 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 {string} 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\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\t * @type {string}\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n *\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\t * @type {CategoryAxisDataFIelds}\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICategoryAxisProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisEvents}\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\t * @type {CategoryAxisDataItem}\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\t * @type {CategoryAxisBreak}\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\t * @type {SerialChart}\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\t * @type {number}\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\t * @type {Dictionary}\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 {CategoryAxisDataItem} 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 {CategoryAxisBreak} 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\r\n\t\t\t\tlet firstSeriesDataItem = this.getSeriesDataItem(series, this.start);\r\n\t\t\t\tlet lastSeriesDataItem = this.getSeriesDataItem(series, this.end, true);\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 {CategoryAxisDataItem} dataItem [description]\r\n\t * @param {number} 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 {CategoryAxisDataItem} dataItem Data item\r\n\t * @param {Object} 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 != 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 {number} index Index\r\n\t * @param {AxisItemLocation | number} location Location (0-1)\r\n\t * @return {number} 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 {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} 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 {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} 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 {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} 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 {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} 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 {string} category Category\r\n\t * @return {number} 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 {string} startCategory Start category\r\n\t * @param {string} 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 {string} start [description]\r\n\t * @param {string} end [description]\r\n\t * @param {AxisItemLocation} startLocation [description]\r\n\t * @param {AxisItemLocation} endLocation [description]\r\n\t * @return {string} [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 {number} position Source position (px)\r\n\t * @param {AxisItemLocation} location Location within category (0-1)\r\n\t * @return {number} 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 * 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 {XYSeries} series Target series\r\n\t * @param {number} position Position (px)\r\n\t * @return {XYSeriesDataItem} Series data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, last?: boolean): XYSeriesDataItem {\r\n\r\n\t\tif ($type.isNumber(position)) {\r\n\t\t\tlet index = this.positionToIndex(position);\r\n\r\n\t\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet category = dataItem.category;\r\n\r\n\t\t\t\tlet sdi: XYSeriesDataItem;\r\n\t\t\t\t//try the same index first\r\n\t\t\t\tif (!last) {\r\n\t\t\t\t\tlet seriesDataItem = series.dataItems.getIndex(index);\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\r\n\t\t\t\t\t$iter.eachContinue(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\treturn sdi;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfor (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\t\treturn 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\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\t\treturn 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 * 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 {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} 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 {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} 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 {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack key (?)\r\n\t * @return {number} 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 {number} position Position (px)\r\n\t * @return {number} 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 {number} position Position (px)\r\n\t * @return {number} 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 {number} position Position (px)\r\n\t * @return {string} 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 {number} position Position (px)\r\n\t * @return {number} 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 {number} position Relative position on axis (0-1)\r\n\t * @return {string} 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) { // @martynas todo: added this check, but this means that some aria label might not be received?\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 {IPoint} 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 * 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\t * @type {Date}\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\t * @type {Date}\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\t * @type {IDateAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisBreakEvents}\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\t * @type {ValueAxis}\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 * @type {ITimeInterval}\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 * @type {Date}\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 {Date} 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 {Date} 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 {Date} 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 {Date} 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\t * @type {DateAxis}\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 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} 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} 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 {Date} 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\t * @type {string}\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 * @type {boolean}\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 {boolean} 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 * @type {boolean}\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\t * @type {string}\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\t * @type {IDateAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDateAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisEvents}\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\t * @type {DateAxisDataItem}\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\t * @type {DateAxisBreak}\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\t * @type {List}\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 * @type {Dictionary}\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\t * @type {Dictionary}\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\t * @type {ITimeInterval}\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 * @type {number}\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 * @type {Date}\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 * @type {TimeUnit}\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\t * @type {ITimeInterval}\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\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t * @type {number}\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 * @type {number}\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\t * @todo type\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]) {\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 {DateAxisDataItem} 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 {DateAxisBreak} 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 {XYSeriesDataItem} 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} date [description]\r\n\t * @param {number} intervalCount [description]\r\n\t * @return {Date} [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 {DateAxisBreak} axisBreak [description]\r\n\t * @param {TimeUnit} timeUnit [description]\r\n\t * @param {number} count [description]\r\n\t * @return {Date} [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(new Date(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\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\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 {DateAxisDataItem} 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 {number} 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 {number} min Min timestamp\r\n\t * @param {number} max Max timestamp\r\n\t * @return {IMinMaxStep} 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 {number} value Value\r\n\t * @return {number} 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 {number} value Value\r\n\t * @return {number} 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 {number} index [description]\r\n\t * @param {number} duration [description]\r\n\t * @param {number} gridCount [description]\r\n\t * @return {ITimeInterval} [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 {number} value Source value\r\n\t * @return {string} 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 Date\r\n\t * @return {number} 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 | number} date Date or a timestamp\r\n\t * @return {number} 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 Date\r\n\t * @return {IOrientationPoint} 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 {number} value Value\r\n\t * @return {IOrientationPoint} 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 {number} position Position (px)\r\n\t * @return {Date} 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 {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} 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 {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} 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 {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack ID\r\n\t * @return {number} 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 {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} key [description]\r\n\t * @param {number} location [description]\r\n\t * @return {number} [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 {XYSeriesDataItem} 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 {ITimeInterval} 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 {ITimeInterval} 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 {boolean} 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 {boolean} 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 {string} 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 {string} 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 {boolean} 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 {boolean} 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 {number} position Position\r\n\t * @return {string} 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 {number} position Source position\r\n\t * @param {AxisItemLocation} location Location in the cell\r\n\t * @return {number} 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 {number} position Relative position\r\n\t * @return {number} 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 {number} position Relative position\r\n\t * @return {number} 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 {XYSeries} series Series\r\n\t * @param {number} position Position (px)\r\n\t * @param {boolean} findNearest Should axis try to find nearest tooltip if there is no data item at exact position\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\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 {number} position Relative position on axis (0-1)\r\n\t * @return {string} 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 {string} 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 {IPoint} 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 {Date} startDate Start date\r\n\t * @param {Date} endValue End date\r\n\t * @param {boolean} skipRangeEvent Do not invoke events\r\n\t * @param {boolean} 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 {string} field Field name\r\n\t * @return {boolean} 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 {this} 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 {number} position Position (0-1)\r\n\t * @param {boolean} 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\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 {boolean} 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 {boolean} 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\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 * 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 * @type {number}\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 * @type {number}\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 * @type {number}\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 * @type {number}\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\t * @type {XYSeries}\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 {number} 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 {number} 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 {number} 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 {number} 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 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} 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 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} 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 {string} 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 {string} 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 {string} 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 {string} 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 {number} 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 {number} 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 {number} 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 {number} 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 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} 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 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} 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 {string} 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 {string} 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 {string} 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 {string} 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 {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} 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 {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} 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\n * @type {Object}\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t *\r\n\t * @type {XYSeriesDataItem}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {CalculatedValue}\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\t * @type {CalculatedValue}\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\t * @type {CalculatedValue}\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\t * @type {CalculatedValue}\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 * @type {boolean}\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 * @type {boolean}\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\t * @type {IXYSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYSeriesEvents}\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\t * @type {XYSeriesDataItem}\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\t * @type {MutableValueDisposer}\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\t * @type {MutableValueDisposer}\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\t * @type {XYChart}\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\t * @type {Axis}\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\t * @type {Dictionary}\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\t * @type {Dictionary}\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 * @type {string}\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 * @type {string}\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 * @type {string}\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 * @type {string}\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 * @type {string}\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 * @type {string}\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 * @type {Array}\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 * @type {Array}\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 * @type {XYSeries}\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 {XYSeriesDataItem} 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 {XYSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} 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 {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} 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 Axis\r\n\t * @param {Array} fields Fields (?)\r\n\t * @param {Key} 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 {Key} field Field\r\n\t * @param {CategoryAxis} 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 {Key} field Field\r\n\t * @param {DateAxis} 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 {string} 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 Axis\r\n\t * @return {string} 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;\t\t\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 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} 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 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} 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 {Axis} 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} 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 {OrderedListTemplate} 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) {\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 {number} xPosition X\r\n\t * @param {number} 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\t\t\t\t\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 {this[\"_dataItem\"]} 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 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 {boolean} 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 {boolean} 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 {boolean} 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 {boolean} 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 {number} duration Duration of reveal animation (ms)\r\n\t * @return {Animation} 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 {number} duration Duration of hiding animation (ms)\r\n\t * @return {Animation} 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 {this[\"_dataItem\"]} 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 {string} [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 {string} [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 {string} [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 {string} [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 {string} 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 {string} [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 {string} 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 {string} [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 {ValueAxis} axis Axis\r\n\t * @return {number} 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 {ValueAxis} axis Axis\r\n\t * @return {number} 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 {ValueAxis} axis Axis\r\n\t * @return {number} 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 {ValueAxis} axis Axis\r\n\t * @return {number} 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 {object} 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 {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} 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 {boolean} 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 {boolean} 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\t * @type {ICursorProperties}\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICursorAdapters}\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICursorEvents}\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\t * @type {IPoint}\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\t * @type {IPoint}\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 * @type {IPoint}\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 * @type {number}\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 * @type {number}\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 * @type {boolean}\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\t * @type {\"zoom\" | \"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\t * @type {Chart}\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\t * @type {IPoint}\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 * @type {IPoint}\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 * @type {IPoint}\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 {IInteractionObjectEvents[\"track\"]} 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 {number} duration Fade out duration (ms)\r\n\t * @return {Animation} 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 {IPoint} point Point to place cursor at\r\n\t * @param {\"hard\" | \"soft\" | \"none\"} 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 {IPoint} 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 {IPoint} 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 {IPoint} 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 {IPoint} 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 {IPoint} 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();\t\t\t\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}\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 {IInteractionEvents[\"down\"]} 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 {IInteractionEvents[\"up\"]} 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 {Chart} 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} 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\t * @type {boolean}\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\t * @type {boolean}\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\t * @type {number}\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {XYSeries}\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\t * @type {IXYCursorProperties}\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t *\r\n\t * @type {IXYCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYCursorEvents}\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\t * @type {MutableValueDisposer}\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\t * @type {MutableValueDisposer}\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\t * @type {Sprite}\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\t * @type {IRange}\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\t * @type {IRange}\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\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\t * @type {Chart}\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 {IPoint} 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 {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} 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 * @type {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} Bheavior\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 {boolean} 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 {boolean} 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 {boolean} 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 {boolean} 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 {number} 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 {number} 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} 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 {Axis} 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} 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 {Axis} 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 {ISpriteEvents[\"positionchanged\"]} 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 {ISpriteEvents[\"positionchanged\"]} 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 {Sprite} 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 {Sprite} 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 {Sprite} 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 {Sprite} 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 {Sprite} 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 {Sprite} 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 {object} 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\t * @type {IXYChartScrollbarProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartScrollbarAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartScrollbarEvents}\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\t * @type {List}\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\t * @type {MutableValueDisposer}\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\t * @type {XYChart}\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 * @type {Sprite}\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 {List} 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 {IListEvents[\"inserted\"]} 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;\t\t\t\t\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{\t\t\t\t\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;\t\t\t\t\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;\t\t\t\t\t\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 {IListEvents[\"removed\"]} 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 {XYChart} 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 {XYChart} 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 {XYChart} 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 {object} 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 { 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\t * @type {XYChart}\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\t * @type {[type]}\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\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\t * @type {IXYChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChartProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartEvents}\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\t * @type {XYSeries}\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\t * @type {List>}\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\t * @type {List>}\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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}\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\t * @type {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\t * @type {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\t * @type {XYCursor}\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\t * @type {Container}\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\t * @type {typeof AxisRendererX}\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\t * @type {typeof AxisRendererY}\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\t * @type {AxisRendererX}\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\t * @type {AxisRendererY}\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\t * @type {Button}\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\t * @type {Sprite}\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\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 {AMEvent[\"propertychanged\"]} 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 {AMEvent[\"propertychanged\"]} 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 {IListEvents[\"inserted\"]} 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 {IListEvents[\"inserted\"]} 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 Scrollbar instance\r\n\t * @param {IRange} 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 {List} axes A list of axes\r\n\t * @return {IRange} 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 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 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 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} 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} 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 {IListEvents[\"inserted\"]} 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 {XYCursor} 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 {XYCursor} 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 {this} 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}\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 {List} 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 {IPoint} 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\t\t\t\r\n\t\t\tlet point = series.showTooltipAtPosition(position.x, position.y);\r\n\t\t\tif(point){\r\n\t\t\t\tseries.tooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: this.pixelHeight });\t\r\n\t\t\t\tseriesPoints.push({series:series, point:point});\r\n\t\t\t}\r\n\r\n\t\t\t//}\r\n\t\t});\r\n\r\n\t\tthis.sortSeriesTooltips(seriesPoints);\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}\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}\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 {List} axes List of axes to show tooltip on\r\n\t * @param {number} 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) {\t\t\t\t\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 Axis\r\n\t * @param {IRange} range Range\r\n\t * @return {IRange} 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 {IXYCursorEvents[\"zoomended\"]} 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 {IXYCursorEvents[\"panning\"]} 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 {IXYCursorEvents[\"panning\"]} 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 {IXYCursorEvents[\"panning\"]} 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 difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + 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 difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + 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 {IXYCursorEvents[\"zoomended\"]} 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 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} 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 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} 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 {AMEvent[\"rangechanged\"]} 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}\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 {AMEvent[\"rangechanged\"]} 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}\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 {List} axes List of axes to zoom\r\n\t * @param {IRange} range Range of values to zoom to (0-1)\r\n\t * @param {boolean} instantly If set to `true` will skip zooming animation\r\n\t * @return {IRange} 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 {boolean} 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 {boolean} 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\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param {AMEvent[\"wheel\"]} 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 {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} 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 {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} 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 {string[]} fields Array of date fields\r\n\t * @return {string[]} 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 {string[]} value Array of number fields\r\n\t * @return {string[]} 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 {object} 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 {string} a Element 1\r\n\t * @param {string} b Element 2\r\n\t * @return {Ordering} 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 {this} 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} 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 {Button} 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 {XYChart} 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 {Object | Object[]} 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\t * @type {ILineSeriesSegmentPropertiess}\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesSegmentEvents}\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\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\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 * @type {Sprite}\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 {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} 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 {Sprite} 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\t * @type {LineSeries}\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 * @type {IPoint}\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\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 * @type {number}\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 * @type {number}\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 * @type {boolean}\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\t * @type {ILineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ILineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesEvents}\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\t * @type {LineSeriesDataItem}\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\t * @type {ListTemplate}\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 * @type {Container}\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 * @type {number}\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\t * @type {ListIterator}\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 {LineSeriesDataItem} 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 {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} 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 {this[\"_dataItem\"]} 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 {number} openIndex [description]\r\n\t * @param {AxisDataItem} 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 {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} 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 {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {number} openIndex [description]\r\n\t * @param {number} closeIndex [description]\r\n\t * @param {AxisDataItem} 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 {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} 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 {object} itemProperties Item properties\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @return {boolean} 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 {boolean} 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 {boolean} 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 {number} 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 {number} 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 {number} 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 {number} 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 {Container} 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\t * @type {RadarSeries}\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 * @type {boolean}\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\t * @type {IRadarSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarSeriesEvents}\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\t * @type {RadarSeriesDataItem}\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\t * @type {RadarChart}\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 {RadarSeriesDataItem} 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 {RadarSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} 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}\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 {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} 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 {string} 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 {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {IPoint[]} 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 {boolean} value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} 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\t * @type {number | 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\t * @type {number | 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\t * @type {number}\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\t * @type {number}\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 * @type {IRadarCursorProperties}\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {IRadarCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarCursorEvents}\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\t * @type {Chart}\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 {IPoint} point Point to check\r\n\t * @return {boolean} 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 {number} 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 {number} 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 {number} 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 {number} 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 {IPoint} 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 {IPoint} 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 {ISpriteEvents[\"positionchanged\"]} 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 {ISpriteEvents[\"positionchanged\"]} 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 {number | Percent} 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 {number} 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 {number} 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 {number} 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 {number | Percent} 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 {number} 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 {number} 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\t * @type {number}\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\t * @type {number}\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 * @type {\"circles\" | \"polygons\"}\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\t * @type {number}\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\t * @type {number | 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\t * @type {number | 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\t * @type {AxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererRadialEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @type {MutableValueDisposer}\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} 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 {number} 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 {number | Percent} 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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number | Percent} 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 {number} 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 {RadarChart} 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 {RadarChart} 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 {number} position Position (0-1)\r\n\t * @return {IPoint} 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 Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {IPoint} point Point coordinates\r\n\t * @return {boolean} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {\"circles\" | \"polygons\"} 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 * @type {\"circles\" | \"polygons\"} 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 {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} 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} 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} 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 {AxisTick} tick Tick element\r\n\t * @param {number} 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 {number} position Position (0-1)\r\n\t * @return {number} 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 {IPoint} point Point\r\n\t * @return {number} 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\t * @type {RadarChart}\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\t * @type {number | Percent}\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 * @type {number | Percent}\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 * @type {number}\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 * @type {number}\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\t * @type {IRadarChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarChartProperties}\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarChartEvents}\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\t * @type {RadarSeries | RadarColumnSeries}\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\t * @type {AxisRendererCircular}\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\t * @type {AxisRendererRadial}\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\t * @type {AxisRendererCircular}\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\t * @type {AxisRendererRadial}\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 * @type {RadarCursor}\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\t * @type {Container}\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 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 {RadarCursor} 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 {object} 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 {RadarSeries} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number | Percent} 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 {number} 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 {number} 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 {number | Percent} 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 {number} 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 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 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 * @type {number | Percent}\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 * @type {number | Percent}\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 * @type {number}\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 * @type {number}\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @type {\"any\" | \"clockWise\" | \"CounterClockWise\"}\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\t * @type {IClockHandProperties}\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IClockHandAdapters}\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IClockHandEvents}\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\t * @type {Circle}\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\t * @type {Trapezoid}\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\t * @type {MutableValueDisposer}\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\t * @type {any}\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 {Circle} 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 {Circle} 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 {Trapezoid} 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 {Trapezoid} 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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {\"any\" | \"clockWise\" | \"counterClockWise\"} 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 {\"any\" | \"clockWise\" | \"counterClockWise\"} 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 {any} value New value\r\n\t * @param {number} duration Animation duration (ms)\r\n\t * @param {(value:number)=>number} 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 {any} 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 {any} 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 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} 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 {object} 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\t * @type {GaugeChart}\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\t * @type {IGaugeChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IGaugeChartProperties}\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IGaugeChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IGaugeChartEvents}\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\t * @type {ListTemplate}\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 {IListEvents[\"inserted\"]} 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 * Percent 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 { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PercentSeries, PercentSeriesDataItem } from \"../series/PercentSeries\";\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 [[PercentChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PercentChartDataItem 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\t * @type {PercentChart}\r\n\t */\r\n\tpublic _component!: PercentChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PercentChartDataItem\";\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 [[PercentChart]].\r\n */\r\nexport interface IPercentChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PercentChart]]\r\n */\r\nexport interface IPercentChartProperties extends ISerialChartProperties { }\r\n\r\n/**\r\n * Defines events for [[PercentChart]].\r\n */\r\nexport interface IPercentChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PercentChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPercentChartAdapters extends ISerialChartAdapters, IPercentChartProperties { }\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 is a base class for \"percent-based\" chart types like Pie and Funnel.\r\n *\r\n * @see {@link IPercentChartEvents} for a list of available Events\r\n * @see {@link IPercentChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for Pie chart documentation\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for Sliced chart documentation\r\n */\r\nexport class PercentChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPercentChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPercentChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPercentChartProperties}\r\n\t */\r\n\tpublic _properties!: IPercentChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPercentChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPercentChartEvents}\r\n\t */\r\n\tpublic _events!: IPercentChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PercentSeries}\r\n\t */\r\n\tpublic _seriesType: PercentSeries;\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 = \"PercentChart\";\r\n\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\t// so that the chart is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\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 chart 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\tthis.feedLegend();\r\n\t}\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\r\n\t\t\tlet legendData: any[] = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\t$iter.each(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tif (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(dataItem);\r\n\r\n\t\t\t\t\t\tlet legendSettings = series.legendSettings;\r\n\t\t\t\t\t\tif (legendSettings) {\r\n\t\t\t\t\t\t\tif (legendSettings.labelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.labelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemLabelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.itemLabelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.valueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.valueText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemValueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.itemValueText;\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\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"category\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new [[PercentSeries]].\r\n\t *\r\n\t * @return {PercentSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PercentSeries();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setLegend(legend: Legend) {\r\n\t\tsuper.setLegend(legend);\r\n\t\tif (legend) {\r\n\t\t\tlegend.labels.template.text = \"{category}\";\r\n\t\t\tlegend.valueLabels.template.text = \"{value.percent.formatNumber('#.0')}%\";\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"over\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tif (PercentSeriesDataItem.visible && !PercentSeriesDataItem.isHiding) {\r\n\t\t\t\t\tPercentSeriesDataItem.slice.isHover = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"out\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tPercentSeriesDataItem.slice.isHover = false;\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 * @hidden\r\n */\r\nregistry.registeredClasses[\"PercentChart\"] = PercentChart;\r\nregistry.registeredClasses[\"PercentChartDataItem\"] = PercentChartDataItem;\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PercentChart.ts","/**\r\n * Pie tick module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick, ITickProperties, ITickAdapters, ITickEvents } from \"../elements/Tick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { PieSeries } from \"../series/PieSeries\"\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 [[PieTick]].\r\n */\r\nexport interface IPieTickProperties extends ITickProperties { }\r\n\r\n/**\r\n * Defines events for [[PieTick]].\r\n */\r\nexport interface IPieTickEvents extends ITickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieTick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieTickAdapters extends ITickAdapters, IPieTickProperties { }\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 an tick line for a pie slice connecting it to a related label.\r\n *\r\n * @see {@link IPieTickEvents} for a list of available events\r\n * @see {@link IPieTickAdapters} for a list of available Adapters\r\n */\r\nexport class PieTick extends Tick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieTickProperties}\r\n\t */\r\n\tpublic _properties!: IPieTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieTickAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieTickEvents}\r\n\t */\r\n\tpublic _events!: IPieTickEvents;\r\n\r\n\t/**\r\n\t * A label element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _label = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A slice element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _slice = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieTick\";\r\n\t\tthis.element = this.paper.add(\"polyline\");\r\n\t\tthis._disposers.push(this._label);\r\n\t\tthis._disposers.push(this._slice);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the tick 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\r\n\t\tlet slice: Slice = this.slice;\r\n\t\tlet label = this.label;\r\n\r\n\t\tlet series = slice.dataItem.component;\r\n\r\n\t\tif (slice && slice.radius > 0 && label && label.text) {\r\n\t\t\tlet x0 = slice.dx + slice.slice.dx + slice.pixelX + slice.ix * slice.radius * slice.scale;\r\n\t\t\tlet y0 = slice.dy + slice.slice.dy + slice.pixelY + slice.iy * slice.radiusY * slice.scale;\r\n\r\n\t\t\tlet x1: number;\r\n\t\t\tlet y1: number;\r\n\r\n\t\t\tlet x2: number;\r\n\t\t\tlet y2: number;\r\n\r\n\t\t\tif (series.alignLabels) {\r\n\t\t\t\tx1 = label.pixelX - this.length;\r\n\t\t\t\ty1 = label.pixelY;\r\n\r\n\t\t\t\tx2 = label.pixelX;\r\n\t\t\t\ty2 = y1;\r\n\r\n\t\t\t\tif (label.horizontalCenter == \"right\") {\r\n\t\t\t\t\tx1 += 2 * this.length;\r\n\t\t\t\t\tx2 = x1 - this.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar r = label.pixelRadius(slice.radius);\r\n\r\n\t\t\t\tx1 = x0 + r * slice.ix;\r\n\t\t\t\ty1 = y0 + r * slice.iy;\r\n\r\n\t\t\t\tx2 = x1;\r\n\t\t\t\ty2 = y1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.attr({ \"points\": [x0, y0, x1, y1, x2, y2] });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Slice element tick is attached to.\r\n\t *\r\n\t * @param {Slice} slice Slice\r\n\t */\r\n\tpublic set slice(slice: Slice) {\r\n\t\tthis._slice.set(slice, new MultiDisposer([\r\n\t\t\tslice.events.on(\"transformed\", this.invalidate, this),\r\n\t\t\tslice.events.on(\"validated\", this.invalidate, this)\r\n\t\t]));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Slice} Slice\r\n\t */\r\n\tpublic get slice(): Slice {\r\n\t\treturn this._slice.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Label element tick is attached to.\r\n\t *\r\n\t * @param {AxisLabelCircular} label Label\r\n\t */\r\n\tpublic set label(label: AxisLabelCircular) {\r\n\t\tthis._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {AxisLabelCircular} Label\r\n\t */\r\n\tpublic get label(): AxisLabelCircular {\r\n\t\treturn this._label.get();\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[\"PieTick\"] = PieTick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/PieTick.ts","/**\r\n * Defines Pie Chart Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPercentSeriesAdapters, IPercentSeriesDataFields, IPercentSeriesEvents, IPercentSeriesProperties, PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\n//import { Slice3D } from \"../../core/elements/3D/Slice3D\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { PieTick } from \"../elements/PieTick\";\r\nimport { 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 { PieChart } from \"../types/PieChart\";\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 { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\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 [[PieSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeriesDataItem extends PercentSeriesDataItem {\r\n\r\n\t/**\r\n\t * A type of slice used for this series.\r\n\t *\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic _slice: Slice;\r\n\r\n\t/**\r\n\t * A reference to a slice label element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * A reference to a slice tick element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {PieTick}\r\n\t */\r\n\tpublic _tick: PieTick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _component!: PieSeries;\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 = \"PieSeriesDataItem\";\r\n\r\n\t\tthis.values.radiusValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice's radius, if other than default.\r\n\t *\r\n\t * @param {number} value Radius\r\n\t */\r\n\tpublic set radiusValue(value: number) {\r\n\t\tthis.setValue(\"radiusValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get radiusValue(): number {\r\n\t\treturn this.values.radiusValue.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the data item (and corresponding visual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {number} toValue Target value for animation\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): Animation {\r\n\t\treturn super.hide(duration, delay, 0, [\"value\", \"radiusValue\"]);\r\n\t}\r\n\r\n\t/**\r\n\t * Show hidden data item (and corresponding cisual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): Animation {\r\n\t\treturn super.show(duration, delay, [\"value\", \"radiusValue\"]);\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 [[PieSeries]].\r\n */\r\nexport interface IPieSeriesDataFields extends IPercentSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds item's radius value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tradiusValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesProperties extends IPercentSeriesProperties {\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesEvents extends IPercentSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeriesAdapters extends IPercentSeriesAdapters, IPieSeriesProperties { }\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 Pie chart.\r\n *\r\n * @see {@link IPieSeriesEvents} for a list of available Events\r\n * @see {@link IPieSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries extends PercentSeries {\r\n\r\n\tpublic _slice: Slice;\r\n\r\n\tpublic _tick: PieTick;\r\n\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\tpublic _chart: PieChart;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPieSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPieSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PieSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PieSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds current angle for the next slice to start on.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _currentStartAngle: number;\r\n\r\n\t/**\r\n\t * Data items that fall to the left side of the pie.\r\n\t */\r\n\tprotected _leftItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * Data items that fall to the right side of the pie.\r\n\t */\r\n\tprotected _rightItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * [_arcRect description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {IRectangle}\r\n\t */\r\n\tprotected _arcRect: IRectangle;\r\n\r\n\t/**\r\n\t * [_maxRadiusPercent description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxRadiusPercent: number;\r\n\r\n\t/**\r\n\t * [_pixelRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelRadius: number;\r\n\r\n\t/**\r\n\t * [_pixelInnerRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelInnerRadius: 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 = \"PieSeries\";\r\n\r\n\t\tthis.alignLabels = true;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.labels.template.radius = percent(5);\r\n\r\n\t\tthis.applyTheme();\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 Slice();\r\n\t}\r\n\r\n\t/**\r\n\t * creates tick\r\n\t */\r\n\tprotected createTick(): this[\"_tick\"] {\r\n\t\treturn new PieTick();\r\n\t}\r\n\r\n\t/**\r\n\t * creates label\r\n\t */\r\n\tprotected createLabel(): this[\"_label\"] {\r\n\t\treturn new AxisLabelCircular();\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(\"Pie Slice 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 {PieSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits slice.\r\n\t *\r\n\t * @param {Slice} slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tslice.isMeasured = false;\r\n\t\tslice.defaultState.properties.scale = 1;\r\n\t\tslice.observe(\"scale\", this.handleSliceScale, this);\r\n\t\tslice.observe([\"dx\", \"dy\", \"x\", \"y\", \"shiftRadius\"], this.handleSliceMove, this);\r\n\t\tslice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n\r\n\t\tlet hoverState = slice.states.create(\"hover\");\r\n\t\thoverState.properties.scale = 1.05;\r\n\r\n\t\tlet defaultState = slice.defaultState;\r\n\t\tdefaultState.properties.shiftRadius = 0;\r\n\r\n\t\tslice.togglable = true;\r\n\r\n\t\tslice.events.on(\"toggled\", (event) => {\r\n\t\t\tevent.target.hideTooltip();\r\n\t\t});\r\n\r\n\t\tlet activeState = slice.states.create(\"active\");\r\n\t\tactiveState.properties.shiftRadius = 0.10;\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\tthis._leftItems = [];\r\n\t\tthis._rightItems = [];\r\n\r\n\t\tthis._currentStartAngle = this.startAngle;\r\n\t\tthis._arcRect = $math.getArcRect(this.startAngle, this.endAngle);\r\n\r\n\t\tthis._maxRadiusPercent = 0;\r\n\t\tfor (let i = this.startIndex; i < this.endIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet radiusValuePercent = dataItem.values.radiusValue.percent;\r\n\t\t\tif (radiusValuePercent > this._maxRadiusPercent) {\r\n\t\t\t\tthis._maxRadiusPercent = radiusValuePercent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tif (this.alignLabels) {\r\n\t\t\tif (this.startAngle > this.endAngle) {\r\n\t\t\t\tthis._rightItems.reverse();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._leftItems.reverse()\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._rightItems.sort((a, b) => {\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle > 270) {\r\n\t\t\t\t\taAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (bAngle > 270) {\r\n\t\t\t\t\tbAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis._leftItems.sort((a, b) => {\r\n\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis.arrangeLabels(this._rightItems);\r\n\t\t\tthis.arrangeLabels(this._leftItems);\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 {PieSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tif (this.pixelRadius > 0) {\r\n\r\n\t\t\tlet percent = dataItem.values.value.percent;\r\n\r\n\t\t\t// SLICE\r\n\t\t\tlet slice: Slice = dataItem.slice;\r\n\t\t\tslice.radius = this.pixelRadius;\r\n\r\n\t\t\tif ($type.isNumber(dataItem.radiusValue)) {\r\n\t\t\t\tslice.radius = this.pixelInnerRadius + (this.pixelRadius - this.pixelInnerRadius) * dataItem.values.radiusValue.percent / this._maxRadiusPercent;\r\n\t\t\t}\r\n\t\t\tif (!(slice.innerRadius instanceof Percent)) {\r\n\t\t\t\tslice.innerRadius = this.pixelInnerRadius;\r\n\t\t\t}\r\n\t\t\tslice.startAngle = this._currentStartAngle;\r\n\r\n\t\t\tslice.arc = dataItem.values.value.percent * (this.endAngle - this.startAngle) / 100;\r\n\r\n\t\t\t// LABEL\r\n\t\t\tlet label = dataItem.label;\r\n\r\n\t\t\tlet tick = dataItem.tick;\r\n\t\t\ttick.slice = slice;\r\n\t\t\ttick.label = label;\r\n\r\n\t\t\tlet normalizedMiddleAngle: number = (slice.middleAngle + 360) % 360; // force angle to be 0 - 360;\r\n\r\n\t\t\tlet point: IPoint;\r\n\r\n\t\t\tif (this.alignLabels) {\r\n\t\t\t\tlet labelRadius = label.pixelRadius(slice.radius);\r\n\t\t\t\tlet x: number = tick.length + labelRadius;\r\n\t\t\t\tlabel.dx = 0;\r\n\t\t\t\tlabel.dy = 0;\r\n\t\t\t\tlabel.verticalCenter = \"middle\";\r\n\t\t\t\tlet arcRect = this._arcRect;\r\n\t\t\t\t// right half\r\n\t\t\t\tif (normalizedMiddleAngle >= 270 || normalizedMiddleAngle <= 90) { // 91 makes less chances for flickering\r\n\t\t\t\t\tx += (arcRect.width + arcRect.x) * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"left\";\r\n\t\t\t\t\tthis._rightItems.push(dataItem);\r\n\t\t\t\t}\r\n\t\t\t\t// left half\r\n\t\t\t\telse {\r\n\t\t\t\t\tx -= arcRect.x * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"right\";\r\n\t\t\t\t\tthis._leftItems.push(dataItem);\r\n\t\t\t\t\tx *= -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet distance = slice.radius + tick.length + labelRadius;\r\n\t\t\t\tpoint = { x: x, y: slice.iy * distance };\r\n\t\t\t\tlabel.moveTo(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet depth = (slice)[\"depth\"];\r\n\t\t\t\tif (!$type.isNumber(depth)) {\r\n\t\t\t\t\tdepth = 0;\r\n\t\t\t\t}\r\n\t\t\t\tlabel.fixPosition(slice.middleAngle, slice.radius, slice.radiusY, 0, -depth);\r\n\t\t\t}\r\n\r\n\t\t\tthis._currentStartAngle += slice.arc;\r\n\r\n\t\t\t// do this at the end, otherwise bullets won't be positioned properly\r\n\t\t\tsuper.validateDataElement(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels or [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} 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 {number} Radius\r\n\t * @ignore\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn this._pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set pixelRadius(value: number) {\r\n\t\tif (this._pixelRadius != value) {\r\n\t\t\tthis._pixelRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Pixel inner radius\r\n\t * @ignore\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 * @ignore\r\n\t */\r\n\tpublic set pixelInnerRadius(value: number) {\r\n\t\tif (this._pixelInnerRadius != value) {\r\n\t\t\tthis._pixelInnerRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number | Percent} 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 * @ignore Exclude from docs\r\n\t * @return {number | Percent} 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 * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} 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 for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value 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 * @ignore Exclude from docs\r\n\t * @return {number} 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 * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Bullet} 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: Slice = dataItem.slice;\r\n\r\n\t\tlet locationX = bullet.locationX;\r\n\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\tlocationX = 0.5;\r\n\t\t}\r\n\t\tlet locationY = bullet.locationY;\r\n\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\tlocationY = 1;\r\n\t\t}\r\n\r\n\t\tlet angle = slice.startAngle + slice.arc * locationX;\r\n\r\n\t\tbullet.x = locationY * slice.radius * $math.cos(angle);\r\n\t\tbullet.y = locationY * slice.radiusY * $math.sin(angle);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Repositions bullet and labels when slice moves.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handleSliceMove(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (!this.alignLabels) {\r\n\r\n\t\t\tlet slice = event.target;\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = slice.dataItem;\r\n\t\t\t// moving textelement, as label dx and dy are already employed for aligning\r\n\t\t\t//@labeltodo\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet label = dataItem.label;\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel.dx = label.fdx + slice.dx + slice.pixelX;\r\n\t\t\t\t\tlabel.dy = label.fdy + slice.dy + slice.pixelY;\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 * Returns bounding box (square) for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {IRectangle}\r\n\t */\r\n\tpublic get bbox(): IRectangle {\r\n\t\tif (this.definedBBox) {\r\n\t\t\treturn this.definedBBox;\r\n\t\t}\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\treturn $math.getArcRect(chart.startAngle, chart.endAngle, this.pixelRadius);\r\n\t\t}\r\n\r\n\t\treturn $math.getArcRect(this.startAngle, this.endAngle, this.pixelRadius);\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[\"PieSeries\"] = PieSeries;\r\nregistry.registeredClasses[\"PieSeriesDataItem\"] = PieSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries.ts","/**\r\n * Pie 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 { PieSeries, PieSeriesDataItem } from \"../series/PieSeries\";\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 [[PieChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChartDataItem 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\t * @type {PieChart}\r\n\t */\r\n\tpublic _component!: PieChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChartDataItem\";\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 [[PieChart]].\r\n */\r\nexport interface IPieChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart]]\r\n */\r\nexport interface IPieChartProperties extends IPercentChartProperties {\r\n\r\n\t/**\r\n\t * Outer radius of the pie.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Relative inner radius (0-1).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tinnerRadius?: number;\r\n\r\n\t/**\r\n\t * An angle pie starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle pie ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart]].\r\n */\r\nexport interface IPieChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChartAdapters extends IPercentChartAdapters, IPieChartProperties { }\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 Pie chart.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"PieSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChartEvents} for a list of available Events\r\n * @see {@link IPieChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPieChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChartProperties}\r\n\t */\r\n\tpublic _properties!: IPieChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChartEvents}\r\n\t */\r\n\tpublic _events!: IPieChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _seriesType: PieSeries;\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 = \"PieChart\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.innerRadius = 0;\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tlet seriesContainer = this.seriesContainer;\r\n\t\tseriesContainer.isMeasured = true;\r\n\t\tseriesContainer.valign = \"middle\";\r\n\t\tseriesContainer.align = \"center\";\r\n\t\tseriesContainer.layout = \"absolute\";\r\n\t\tseriesContainer.width = undefined;\r\n\t\tseriesContainer.height = undefined;\r\n\r\n\t\t// so that the pie is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\r\n\t\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.updateRadius, this, false); // need this for the chart to change radius if legend is removed/disabled\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(\"Pie 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 validateLayout(): void {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.updateRadius();\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[Series]] 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 {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\tsuper.handleSeriesAdded(event);\r\n\t\tthis.updateSeriesAngles();\r\n\t}\t\r\n\r\n\tprotected updateSeriesAngles(){\r\n\t\tthis.series.each((series)=>{\r\n\t\t\tseries.startAngle = this.startAngle;\r\n\t\t\tseries.endAngle = this.endAngle;\r\n\t\t\tseries.defaultState.properties.startAngle = this.startAngle;\r\n\t\t\tseries.defaultState.properties.endAngle = this.endAngle;\t\t\t\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates pie's radius, based on a number of criteria.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateRadius(): void {\r\n\r\n\t\tlet chartCont = this.chartContainer;\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 innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, innerRadius.value);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for radar also)\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartCont.innerWidth / rect.width, chartCont.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 chartPixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, maxRadius);\r\n\r\n\t\tlet seriesRadius = (chartRadius - chartPixelInnerRadius) / this.series.length;\r\n\t\t//@todo: make it possible to set series radius in percent\r\n\t\t$iter.each($iter.indexed(this.series.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet series = a[1];\r\n\r\n\t\t\tlet radius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.radius, chartRadius - chartPixelInnerRadius);\r\n\t\t\tlet innerRadius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.innerRadius, chartRadius - chartPixelInnerRadius);\r\n\r\n\t\t\tif(!$type.isNumber(radius)){\r\n\t\t\t\tradius = chartPixelInnerRadius + seriesRadius * (i + 1);\r\n\t\t\t}\r\n\t\t\tif(!$type.isNumber(innerRadius)){\r\n\t\t\t\tinnerRadius = chartPixelInnerRadius + seriesRadius * i;\r\n\t\t\t}\r\n\r\n\t\t\tseries.pixelRadius = radius;\r\n\t\t\tseries.pixelInnerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tthis.seriesContainer.definedBBox = { x: chartRadius * rect.x, y: chartRadius * rect.y, width: chartRadius * rect.width, height: chartRadius * rect.height };\r\n\t\tthis.seriesContainer.invalidateLayout();\r\n\r\n\t\tthis.bulletsContainer.x = this.seriesContainer.x;\r\n\t\tthis.bulletsContainer.y = this.seriesContainer.y;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets radius of the pie chart.\r\n\t *\r\n\t * Setting to a number will mean a fixed pixel radius.\r\n\t *\r\n\t * Setting to an instance of [[Percent]] will mean a relative radius to\r\n\t * available space.\r\n\t *\r\n\t * E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * \"radius\": \"50%\"\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {number | Percent} value Radius (px or relative)\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif(this.setPercentProperty(\"radius\", value, true, false, 10, false)){\r\n\t\t\tthis.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius (px or relative)\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 * Sets relative inner radius (to create a donut chart).\r\n\t *\r\n\t * The inner radius is relative to pie's radius:\r\n\t * * 0 - solid pie (no hole inside);\r\n\t * * 0.5 - hole is half the radius of the pie;\r\n\t * * 1 - does not make sense, because the hole will take up the whole radius.\r\n\t *\r\n\t * @param {number | Percent} value Relative inner radius (0-1)\r\n\t * @todo Setting things like `innerRadius` modifies `slice.radius` and it then looks like it is not the same value as in default state\r\n\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 {number} Relative inner radius (0-1)\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 * Creates a new [[PieSeries]].\r\n\t *\r\n\t * @return {PieSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart begins (the left side of the first slice is drawn)\r\n\t * at the 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 first slice be drawn to the right.\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 to those 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 Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"startAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} 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 * End angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart ends (the right side of the last slice is drawn)\r\n\t * at the top center. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to change this setting.\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 to those 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 Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t * \r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default 270\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"endAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} 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\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart\"] = PieChart;\r\nregistry.registeredClasses[\"PieChartDataItem\"] = PieChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart.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\t * @type {Slice3D}\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\t * @type {PieSeries3D}\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 * @type {PieSeries3D}\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 {number} 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 {number} 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\t * @type {string}\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\t * @type {number}\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\t * @type {number}\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\t * @type {IPieSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeries3DEvents}\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\t * @type {PieSeries3DDataItem}\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\t * @type {PieChart3D}\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 {PieSeries3DDataItem} 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 {PieSeries3DDataItem} 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 {number} 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 {number} 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 {number} 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 {number} 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 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\t * @type {PieChart3D}\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\t * @type {number}\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\t * @type {number}\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\t * @type {IPieChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChart3DEvents}\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\t * @type {PieSeries3D}\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 {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tif (this.setPropertyValue(\"depth\", value)) {\t\t\t\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} 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 {number} 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 {number} 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 {PieSeries3D} 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\t * @type {SlicedChart}\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\t * @type {ISlicedChartDataFields}\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ISlicedChartProperties}\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ISlicedChartEvents}\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\t * @type {FunnelSeries}\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\t * @type {IChordNodeProperties}\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordNodeAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordNodeEvents}\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\t * @type {List}\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\t * @type {List}\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\t * @type {Iterator}\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 * @type {Iterator}\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\t * @type {ChordDiagram}\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\t * @type {ChordDiagramDataItem}\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 * @type {Slice}\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\t * @type {AxisLabelCircular}\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 {ChordNode} 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\t * @type {number}\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\t * @type {number}\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\t * @type {IQuadraticCurveProperties}\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IQuadraticCurveAdapters}\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IQuadraticCurveEvents}\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 {number} 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 {number} 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 {number} 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 {number} 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 {number} position Position (0-1)\r\n\t * @return {IOrientationPoint} 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 * @type {number}\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 * @type {number}\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\t * @type {IChordLinkProperties}\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordLinkAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordLinkEvents}\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\t * @type {ChordDiagramDataItem}\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\t * @type Polyspline\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();\t\t\t\t\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 {number} 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 {number} 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 {number} 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 {number} [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\t * @type {ChordDiagram}\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 * @type {ChordLink}\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t *\r\n\t * @type {ChordNode}\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t *\r\n\t * @type {ChordNode}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {number | Percent}\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\t * @type {number | Percent}\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 * @type {number}\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 * @type {number}\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 * @type {boolean}\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\t * @type {ChordDiagramDataItem}\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\t * @type {IChordDiagramDataFields}\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordDiagramProperties}\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordDiagramEvents}\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 * @type {ChordLink}\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 * @type {Iterator}\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 * @type {number}\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\t * @type {Container}\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();\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(\"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 {this} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number} 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 {boolean} 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 {boolean} 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 * @type {Column}\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\t * @type {boolean}\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\t * @type {boolean}\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 * @type {ColumnSeries}\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 * @type {Dictionary}\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} 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} 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\t * @type {Dictionary}\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 pther series.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\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\t * @type {IColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeriesEvents}\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\t * @type {ColumnSeriesDataItem}\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\t * @type {ListTemplate}\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\t * @type {Container}\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\t * @type {number}\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\t * @type {number}\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 {ColumnSeriesDataItem} 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 {ColumnSeriesDataItem} 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 {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} 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 {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} 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 {this[\"_dataItem\"]} 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 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 {ListTemplate} 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 {this[\"_column\"]} 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 pther series.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} 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 {boolean} 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 {SpriteState} 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 {SpriteState} 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 {SpriteState} 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 {SpriteState} 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 {ColumnSeriesDataItem} 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 {Container} 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 {ColumnSeries} 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}\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\t * @type {TreeMapSeries}\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 {Object} 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 {Object} 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 {string} 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 {number} 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 {TreeMapDataItem} 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\t * @type {string}\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\t * @type {ITreeMapSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ITreeMapSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapSeriesEvents}\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\t * @type {number}\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\t * @type {TreeMapSeriesDataItem}\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\t * @type {TreeMap}\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\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 {TreeMapSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} 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 {TreeMapSeriesDataItem} 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 {number} duration Duration of fade in (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\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\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\r\n\t\t}\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 {number} duration Duration of fade out (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\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\r\n\t\tlet chart = this.chart;\r\n\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\t\t\t\t\t\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\t\t\t\t\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\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}\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 {object} 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 {Container} 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\t * @type {TreeMap}\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\t * @type {number}\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Related series.\r\n\t *\r\n\t * @type {TreeMapSeries}\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\t * @type {TreeMapSeriesDataItem}\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 * @type {TreeMapDataItem[]}\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 * @type {number}\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 * @type {boolean}\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 * Numeric value of the item.\r\n\t *\r\n\t * @param {number} 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 {number} Value\r\n\t */\r\n\tpublic get value(): number {\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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {string} 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 {string} 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 {OrderedListTemplate} 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 {OrderedListTemplate} 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 {number} 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 {Color} 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} 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 data item\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (this._series) {\r\n\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\tthis._series.dispose();\r\n\t\t}\r\n\t\tthis._series = series;\r\n\t\tthis._disposers.push(series);\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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\t * @type {string}\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 * @type {number}\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\t * @type {number}\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 * @type {\"none\" | \"ascending\" | \"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\t * @type {TreeMapDataItem}\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\t * @type {ITreeMapDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapEvents}\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\t * @type {ValueAxis}\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\t * @type {ValueAxis}\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 * @type {function}\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\t * @type {PieSeries}\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 * @type {TreeMapDataItem}\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 * @type {TreeMapSeries[]}\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\t * @type {string}\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied autoamtically to each new chart item, if\r\n\t * not explicitly set.\r\n\t *\r\n\t * @type {ColorSet}\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 {DictionaryTemplate} 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 * @type {boolean}\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\t * @type {NavigationBar}\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @type {TreeMapDataItem}\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\t * @type {NavigationBar}\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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {number} 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 {TreeMapSeriesDataItem} 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 {TreeMapDataItem} 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 {XYSeriesDataItem} 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 {number} 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 {number} 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 {number} 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 {number} 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 {\"none\" | \"ascending\" | \"descending\"} 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 {this} 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 {string} 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 {string} 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 {object} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 {TreeMapDataItem} 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 * @type {IAxisRendererX3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererX3DEvents}\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 * @type {MutableValueDisposer}\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} 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 Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {XYChart3D} 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 {XYChart3D} 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 {AMEvent[\"propertychanged\"]} 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\t * @type {IAxisRendererY3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererY3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererY3DEvents}\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 * @type {MutableValueDisposer}\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} 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 Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} 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 {XYChart3D} 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 {XYChart3D} 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 {AMEvent[\"propertychanged\"]} 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 * @type {Column3D}\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 * @type {number}\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 * @type {number}\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\t * @type {IColumnSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeries3DEvents}\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 * @type {number}\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\t * @type {XYChart3D}\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 {this[\"_dataItem\"]} 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}\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();\t\r\n\t\t}\t\t\r\n\t}\t\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 {this[\"_column\"]} 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 {number} 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 {number} 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 {number} 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 {number} 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\t * @type {number}\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\t * @type {number}\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\t * @type {IXYChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChart3DEvents}\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\t * @type {[type]}\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 * @type {[type]}\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 * @type {Container}\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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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}\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();\t\t\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 {object} 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\t * @type {ICandlestickProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickEvents}\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t * @type {Line}\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 {Candlestick} 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 * @type {Candlestick}\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 * @type {CandlestickSeries}\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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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 {number} 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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {number}\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\t * @type {CandlestickSeriesDataItem}\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\t * @type {ICandlestickSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICandlestickSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickSeriesEvents}\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 {CandlestickSeriesDataItem} 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 {CandlestickSeriesDataItem} 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 {string} 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 {string} 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 {string} 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 {string} 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 {Container} 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 {this[\"_column\"]} 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\t * @type {IOHLCProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCEvents}\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t * @type {Line}\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 {OHLC} 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 * @type {OHLC}\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 * @type {OHLCSeries}\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\t * @type {OHLCSeriesDataItem}\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\t * @type {IOHLCSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IOHLCSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCSeriesEvents}\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 {OHLCSeriesDataItem} 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 {Container} 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 {this[\"_column\"]} 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\t * @type {IStepLineSeriesSegmentProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentEvents}\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 * @type {Sprite}\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 * @type {Sprite}\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 {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} 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\t * @type {StepLineSeries}\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\t * @type {IStepLineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IStepLineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesEvents}\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\t * @type {StepLineSeriesDataItem}\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 {StepLineSeriesDataItem} 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 {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} 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 {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} 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 {boolean} 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 {boolean} 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 {number} 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 {number} 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 {number} 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);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} 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\t * @type {IRadarColumnProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnEvents}\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t * @type {Slice}\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 {RadarColumn} 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 {number} 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 {number} 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 * @type {Slice}\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\t * @type {RadarColumnSeries}\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\t * @type {IRadarColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnSeriesEvents}\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\t * @type {RadarChart}\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 {this[\"_column\"]} 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 {RadarColumnSeriesDataItem} 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 {RadarColumnSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} 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 {string} 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\t * @type {PyramidSeries}\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\t * @type {number | 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\t * @type {number | 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\t * @type {number | Percent}\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 * @type {\"height\" | \"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\t * @type {IPyramidSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPyramidSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPyramidSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPyramidSeriesEvents}\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\t * @type {PyramidSeriesDataItem}\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 * @type {number}\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 {PyramidSeriesDataItem} 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 {FunnelSeriesDataItem} dataItem [description]\r\n\t * @return {number} [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 {this[\"_dataItem\"]} 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;\t\t\t\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\t\t\t\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\t\t\t\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\t * @type {PictorialStackedSeries}\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\t * @type {IPictorialStackedSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesEvents}\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\t * @type {PictorialStackedSeriesDataItem}\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\t * @type {Sprite}\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();\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\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 {PictorialStackedSeriesDataItem} 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 {Sprite} 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 {FunnelSlice} 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\t * @type {IConeColumnProperties}\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeColumnEvents}\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t * @type {Cone}\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 {ConeColumn} 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 * @type {ConeColumn}\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\t * @type {ConeSeries}\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\t * @type {IConeSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IConeSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeSeriesEvents}\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 {this[\"_column\"]} 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 {string} 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 {this[\"_dataItem\"]} 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 * @type {number}\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t *\r\n\t * @type {number}\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 * @type {Orientation}\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\t * @type {ICurvedColumnProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnEvents}\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\t * @type {Sprite}\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 {CurvedColumn} 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 {number} 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 {number} 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 {Orientation} 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 * @type {Orientation} 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 * @type {ConeColumn}\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\t * @type {CurvedColumnSeries}\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\t * @type {CurvedColumn}\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\t * @type {CurvedColumnSeriesDataItem}\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\t * @type {ICurvedColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesEvents}\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 {this[\"_column\"]} 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 {this[\"_dataItem\"]} 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\t * @type {DurationAxis}\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\t * @type {IDurationAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDurationAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDurationAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDurationAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDurationAxisEvents}\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\t * @type {DurationAxisDataItem}\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\t * @type {string}\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 {number} value Source value\r\n\t * @return {string} 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 {number} min [description]\r\n\t * @param {number} max [description]\r\n\t * @param {number} difference [description]\r\n\t * @param {number} gridCount [description]\r\n\t * @param {boolean} strictMode [description]\r\n\t * @return {IMinMaxStep} [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}\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 {string} 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 {string} 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 {number} position Position (px)\r\n\t * @return {string} 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} 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 {TimeUnit} 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 {this} 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\t * @type {ICircleBulletProperties}\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICircleBulletAdapters}\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICircleBulletEvents}\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\t * @type {Circle}\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 {this} 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\t * @type {IErrorBulletProperties}\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IErrorBulletAdapters}\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IErrorBulletEvents}\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 {this} 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\t * @type {NavigationBar}\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 {string} 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 {string} 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\t * @type {string}\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\t * @type {NavigationBarDataFIelds}\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {INavigationBarProperties}\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {INavigationBarAdapters}\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {INavigationBarEvents}\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\t * @type {ListTemplate}\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 * @type {.ListIterator}\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 * @type {.ListIterator}\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\t * @type {TextLink}\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\t * @type {ListTemplate}\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\t * @type {NavigationBarDataItem}\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 {NavigationBarDataItem} 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\t * @type {number | Percent}\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\t * @type {number | Percent}\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\t * @type {IGridCircularProperties}\r\n\t */\r\n\tpublic _properties!: IGridCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IGridCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IGridCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IGridCircularEvents}\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 {number | Percent} 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 {number} 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 {number | Percent} 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 {number} 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":""}