{"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/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/series/XYSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/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_rendering_Path__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Percent__","fdx","fdy","padding","textAlign","axisRadius","sign","pixelRadiusY","axisRadiusY","dx","dy","isNegative","realRadius","relativeRotation","labelRadius","bent","point_1","locationOnPath","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__","DateAxisBreak_DateAxisBreak","DateAxisBreak","tslib_es6","startValue","getTime","endValue","ValueAxisBreak","Registry","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","Dictionary","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","pushAll","axisFieldName","fillRule","dataItem","component","gridInterval","_gridInterval","gridDuration","Time","round","min","axisFill","__disabled","applyInternalDefaults","hasKey","setKey","language","translate","createDataItem","createAxisBreak","validateDataItems","periodCount","max","baseDuration","maxZoomFactor","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","adjustDifference","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","ceil","_difference","floor","Iterator","series","iterator","baseAxis","field_1","getAxisField","startIndex","dataItems","findClosestIndex","endIndex","validateData","Type","minDifference","Number","MAX_VALUE","each","uid","seriesDataChangeUpdate","postProcessSeriesDataItems","JSON","stringify","_baseInterval","postProcessSeriesDataItem","addEmptyUnitsBreaks","dataItemsByAxis","getKey","utils_Object","key","time","getDate","startTime","setCalculatedValue","toString","skipEmptyPeriods","axisBreaks","clear","axisBreak","startTimeStr","this_1","undefined","create","startDate","fixAxisBreaks","breakGridCount","adjustedEndValue","adjustedStartValue","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","isInBreak","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","resetIterators","this_2","format","markUnitChange","text","dateFormatter","find","appendDataItem","validateDataElement","renderer_1","breakSize","timeUnit_1","intervalCount_1","utils_Math","startPoint","endPoint","minGridDistance","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","valueToPosition","fillEndPosition","isRange","disabled","fill","updateFillElement","mask","location_1","adjustMinMax","step","fixMin","startLocation","fixMax","endLocation","index","duration","gridCount","getIndex","intervalDuration","lastIndex","formatLabel","dateToPosition","anyToPosition","dateToPoint","anyToPoint","valueToPoint","positionToDate","positionToValue","getX","getTimeByLocation","baseValue","getY","stack","getValue","getAngle","stackKey","workingLocations","endTime","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","difference","abs","differece","updateAxisBySeries","timeInterval","invalidateData","breakTemplate","startLine","endLine","fillShape","getTooltipText","tooltipDateFormat","dateFormat","getPositionLabel","apply","roundPosition","getCellStartPosition","getCellEndPosition","getSeriesDataItem","findNearest","key_1","getCurrentLabelFormat","initRenderer","baseGrid","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","xAxis","dateX","yAxis","dateY","closestTime_1","seriesPoints_1","showTooltipAtDataItem","push","sortSeriesTooltips","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","indexToPosition","invalidateDataItems","category","categoryToIndex","AxisBreak","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","locations","endCategory","isEnabled","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","_lastDataItem","_disposers","validateDataRange","_series","invalidateDataRange","firstSeriesDataItem","lastSeriesDataItem","positionToIndex","i","fdi","getFirstSeriesDataItem","ldi","getLastSeriesDataItem","dataCount","maxCount","frequency","_startIndex","_endIndex","_frequency","itemIndex","len","frequency_1","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","fillEndIndex","fillPosition","measuredWidth","measuredHeight","currentText","processDataItem","dataContext","existingDataItem","remove","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","categoryX","categoryY","index_1","sdi_1","category_1","seriesDataItem","categories","basePoint","breakStartPosition","breakEndPosition","breakPosition","XYSeries_XYSeriesDataItem","XYSeriesDataItem","valueX","valueY","openValueX","openValueY","openDateX","openDateY","setLocation","setValue","setCategory","openCategoryX","openCategoryY","getMin","fields","working","stackValue","utils_Array","getWorkingValue","getMax","Series","XYSeries_XYSeries","XYSeries","_xAxis","Disposer","_yAxis","_xValueFields","_yValueFields","cursorTooltipEnabled","mainContainer","Sprite","setElement","stacked","pointerOrientation","events","on","returnBulletDefaultState","readerTitle","dataChangeUpdate","_tmin","_tmax","_smin","_smax","defineFields","data","updateItemReaderText","dataFields","_xField","_yField","Error","name","disable","enable","setInitialWorkingValues","e","_chart","raiseCriticalError","disposeData","dataItemsX","dataItemsY","xAxisFieldName","xField","xOpenField","Utils","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","range","Path","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","arrangeTooltips","chartContainer","topAxesCont","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","_bulletMask","exportable","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","_xAxes","handleAxisRemoval","autoDispose","_yAxes","colors","_cursor","cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","createCursor","showSeriesTooltip","exceptAxis","showAxisTooltip","hideObjectTooltip","sprites","sprite","seriesPoints","setBounds","topLeft","bottomRight","sum","filteredSeriesPoints","seriesPoint","sort","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","priority","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","panStartRange","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","dataInvalid","diff","handleWheel","svgPoint","htmlContainer","cssScale","plotPoint","shift","rangeX","rangeY","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","maxWidth","maxHeight","_mouseWheelDisposer","wheelable","hoverable","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","configOrder","createSeries","_zoomOutButton","button","addData","rawDataItem","removeCount","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","connect","tensionX","tensionY","segmentsContainer","previousDataItem","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegment","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","propertyFields","openIndex","closeIndex","propertiesChanged","getFirst","contents","hasProperties","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","Line","x2","Rectangle","legendDataItem","color","colorOrig","copyToLegendMarker","hasLabels_1","children","child","Label","RadarSeries_RadarSeriesDataItem","RadarSeriesDataItem","RadarSeries_RadarSeries","RadarSeries","connectEnds","unshift","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius","innerRadiusModifyer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","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","getDuration","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\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlabel.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererCircular\"] = AxisRendererCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","/**\r\n * 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 $path from \"../../core/rendering/Path\";\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\trelativeRotation?: number;\r\n\r\n\t/**\r\n\t * Distance of the label from circle line.\r\n\t */\r\n\tradius?: number;\r\n\r\n\t/**\r\n\t * Specifies if label should be bent along the circle\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tbent?: boolean;\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\tpublic _properties!: IAxisLabelCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisLabelCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisLabelCircularEvents;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t */\r\n\tpublic _dataItem: any;\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic fdx: number = 0;\r\n\r\n\t/**\r\n\t *\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 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 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 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 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 * Specifies if label should be bent along the circle.\r\n\t *\r\n\t * IMPORTANT: Use this with caution, since it is quite CPU-greedy.\r\n\t *\r\n\t * @since 4.1.2\r\n\t * @default false\r\n\t * @param {boolean} value Bent?\r\n\t */\r\n\tpublic set bent(value: boolean) {\r\n\t\tthis.setPropertyValue(\"bent\", value, true);\r\n\t\tif (value) {\r\n\t\t\tthis.textAlign = \"middle\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Bent?\r\n\t */\r\n\tpublic get bent(): boolean {\r\n\t\treturn this.getPropertyValue(\"bent\");\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 horizontal 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 point Label affixation point\r\n\t * @param 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\tif (this.bent) {\r\n\t\t\tlet point = { x: axisRadius * $math.cos(angle + 180), y: axisRadiusY * $math.sin(angle + 180) };\r\n\t\t\tthis.path = $path.moveTo(point) + $path.arcTo(angle + 180, 360, axisRadius + labelRadius, axisRadiusY + labelRadius * axisRadiusY / axisRadius);\r\n\t\t\tthis.locationOnPath = 0.5;\r\n\t\t\treturn;\r\n\t\t}\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\";\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;\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\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius. Relative or absolute.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t */\r\n\tcornerRadius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularEvents extends IAxisFillEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisFillCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisFillCircularAdapters extends IAxisFillAdapters, IAxisFillCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Provides fill element functionality for circular Axes.\r\n *\r\n * @see {@link IAxisFillCircularEvents} for a list of available events\r\n * @see {@link IAxisFillCircularAdapters} for a list of available Adapters\r\n * @todo Needs description\r\n */\r\nexport class AxisFillCircular extends AxisFill {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisFillCircularEvents;\r\n\r\n\t/**\r\n\t * An SVG path, used to draw fill shape.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic fillPath: string;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tconstructor(axis: Axis) {\r\n\t\tsuper(axis);\r\n\r\n\t\tthis.className = \"AxisFillCircular\";\r\n\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\t\t\tthis.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n\t\t\tthis.path = this.fillPath;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @param value Corner radius (px)\r\n\t */\r\n\tpublic set cornerRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"cornerRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Corner radius (px)\r\n\t */\r\n\tpublic get cornerRadius(): number {\r\n\t\treturn this.getPropertyValue(\"cornerRadius\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisFillCircular\"] = AxisFillCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisFillCircular.ts","/**\r\n * DateAxisBreak includes functionality to add breaks on a [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { ValueAxisBreak, IValueAxisBreakProperties, IValueAxisBreakAdapters, IValueAxisBreakEvents } from \"./ValueAxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DateAxis } from \"./DateAxis\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[DateAxisBreak]].\r\n */\r\nexport interface IDateAxisBreakProperties extends IValueAxisBreakProperties {\r\n\r\n\t/**\r\n\t * A `Date` break starts on.\r\n\t */\r\n\tstartDate?: Date;\r\n\r\n\t/**\r\n\t * A `Date` break ends on.\r\n\t */\r\n\tendDate?: Date;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxisBreak]]\r\n */\r\nexport interface IDateAxisBreakEvents extends IValueAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisBreakAdapters extends IValueAxisBreakAdapters, IDateAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to define breaks for [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n *\r\n * @see {@link IDateAxisBreakEvents} for a list of available events\r\n * @see {@link IDateAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxisBreak extends ValueAxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t */\r\n\tpublic _axisType: DateAxis;\r\n\r\n\t/**\r\n\t * [gridInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [gridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridDate: Date;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting date for the break.\r\n\t *\r\n\t * @param value Start date\r\n\t */\r\n\tpublic set startDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"startDate\", value)) {\r\n\t\t\tthis.startValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start date\r\n\t */\r\n\tpublic get startDate(): Date {\r\n\t\treturn this.getPropertyValue(\"startDate\");\r\n\t}\r\n\r\n\t/**\r\n\t * Ending date for the break.\r\n\t *\r\n\t * @param value End date\r\n\t */\r\n\tpublic set endDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"endDate\", value)) {\r\n\t\t\tthis.endValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.getPropertyValue(\"endDate\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxisBreak\"] = DateAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxisBreak.ts","/**\r\n * DateAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t *\r\n\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 Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet periodCount: number = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.maxZoomFactor = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet newPeriodCount: number = (this.max - this.min) / this.baseDuration;\r\n\t\tstart = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n\t\tthis.zoom({ start: start, end: end }, false, true); // added instantlyto solve zoomout problem when we have axes gaps. @todo: check how this affects maxZoomFactor\r\n\t}\r\n\r\n\t/**\r\n\t * Handles process after zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Does nothing?\r\n\t */\r\n\tpublic handleSelectionExtremesChange(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates all positions, related to axis as per current zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic calculateZoom(): void {\r\n\t\tsuper.calculateZoom();\r\n\r\n\t\tlet gridInterval: ITimeInterval = this.chooseInterval(0, this.adjustDifference(this._minZoomed, this._maxZoomed), this._gridCount);\r\n\r\n\t\tif ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n\t\t\tgridInterval = { ...this.baseInterval };\r\n\t\t}\r\n\r\n\t\tthis._gridInterval = gridInterval;\r\n\r\n\t\tthis._gridDate = $time.round(new Date(this.min), gridInterval.timeUnit, gridInterval.count);\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tlet count: number = Math.ceil(this._difference / this._intervalDuration);\r\n\t\tcount = Math.floor(this.start * count) - 3; // some extra is needed\r\n\r\n\t\t$time.add(this._gridDate, gridInterval.timeUnit, count * gridInterval.count);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = series.getAxisField(this);\r\n\r\n\t\t\t\t// TODO use $type.castNumber ?\r\n\t\t\t\tlet startIndex: number = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet endIndex: number = series.dataItems.findClosestIndex(this._maxZoomed - 1, (x) => x[field], \"right\") + 1;\r\n\r\n\t\t\t\tseries.startIndex = startIndex;\r\n\t\t\t\tseries.endIndex = endIndex;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tif (!$type.isNumber(this.baseInterval.count)) {\r\n\t\t\tthis.baseInterval.count = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get minDifference(): number {\r\n\t\tvar minDifference = Number.MAX_VALUE;\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (minDifference > this._minDifference[series.uid]) {\r\n\t\t\t\tminDifference = this._minDifference[series.uid];\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n\t\t\tminDifference = $time.getDuration(\"day\");\r\n\t\t}\r\n\r\n\t\treturn minDifference;\r\n\t}\r\n\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic seriesDataChangeUpdate(series: XYSeries): void {\r\n\t\tthis._minDifference[series.uid] = Number.MAX_VALUE;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItems description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic postProcessSeriesDataItems(): void {\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (JSON.stringify(series._baseInterval[this.uid]) != JSON.stringify(this.baseInterval)) {\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t\t});\r\n\t\t\t\tseries._baseInterval[this.uid] = this.baseInterval;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet baseInterval: ITimeInterval = this.baseInterval;\r\n\r\n\t\tlet series: XYSeries = dataItem.component;\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet time = date.getTime();\r\n\r\n\t\t\tlet startDate: Date = $time.round(new Date(time), baseInterval.timeUnit, baseInterval.count);\r\n\t\t\tlet startTime = startDate.getTime();\r\n\t\t\tlet endDate: Date = $time.add(new Date(startTime), baseInterval.timeUnit, baseInterval.count);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startTime, \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\r\n\t\t\tdataItemsByAxis.setKey(startTime.toString(), dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tthis.axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\r\n\t\t\tlet date: Date = $time.round(new Date(this.min), timeUnit, count);\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\t\tif (axisBreaks.length > 0) {\r\n\t\t\t// process breaks\r\n\t\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\t\tlet breakGridCount: number = Math.ceil(this._gridCount * (Math.min(this.end, axisBreak.endPosition) - Math.max(this.start, axisBreak.startPosition)) / (this.end - this.start));\r\n\t\t\t\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\t\tlet gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxisBreak.gridDate = gridDate;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getGridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param date [description]\r\n\t * @param intervalCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getGridDate(date: Date, intervalCount: number): Date {\r\n\t\tlet timeUnit: TimeUnit = this._gridInterval.timeUnit;\r\n\t\tlet realIntervalCount: number = this._gridInterval.count;\r\n\t\t// round date\r\n\t\t$time.round(date, timeUnit, 1);\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param axisBreak [description]\r\n\t * @param timeUnit [description]\r\n\t * @param count [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(date, timeUnit, count);\r\n\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate(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 dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > 1) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / this._gridInterval.count;\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.position = position;\r\n\r\n\t\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\t\tif (tick && !tick.disabled) {\r\n\t\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet grid: Grid = dataItem.grid;\r\n\t\t\tif (grid && !grid.disabled) {\r\n\t\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\t\tif (fill && !fill.disabled) {\r\n\t\t\t\trenderer.updateFillElement(fill, position, fillEndPosition);\r\n\t\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\t\tthis.fillRule(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\t\tif (mask) {\r\n\t\t\t\trenderer.updateFillElement(mask, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet label: AxisLabel = dataItem.label;\r\n\t\t\tif (label && !label.disabled) {\r\n\t\t\t\tlet location = label.location;\r\n\r\n\t\t\t\tif (location == 0) {\r\n\t\t\t\t\tif (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n\t\t\t\t\t\tlocation = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlocation = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderer.updateLabelElement(label, position, endPosition, location);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A duration in milliseconds of the `baseInterval`.\r\n\t *\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic get baseDuration(): number {\r\n\t\treturn $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts min/max values.\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description (review)\r\n\t * @param min Min timestamp\r\n\t * @param max Max timestamp\r\n\t * @return Adjusted min/max step\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number): IMinMaxStep {\r\n\t\treturn { min: min, max: max, step: this.baseDuration };\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the minimum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMin(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet startTime = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet startTime = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param index [description]\r\n\t * @param duration [description]\r\n\t * @param gridCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number): ITimeInterval {\r\n\t\tlet gridIntervals: List = this.gridIntervals;\r\n\r\n\t\tlet gridInterval: ITimeInterval = gridIntervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = gridIntervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...gridIntervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index - 1) };\r\n\t\t}\r\n\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param date Date\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param date Date or a timestamp\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param date Date\r\n\t * @return IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param value Value\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack ID\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param key [description]\r\n\t * @param location [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\r\n\t\tif (series._baseInterval[this.uid]) {\r\n\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._baseInterval) {\r\n\t\t\t\tseries._baseInterval[this.uid] = this._baseInterval;\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * @param timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tif (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n\t\t\tthis._baseInterval = timeInterval;\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position\r\n\t * @return Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tif ($type.hasValue(this.tooltipDateFormat)) {\r\n\t\t\ttext = this.dateFormatter.format(date, this.tooltipDateFormat);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n\t\t\tif (dateFormat) {\r\n\t\t\t\ttext = this.dateFormatter.format(date, dateFormat);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = this.getPositionLabel(position);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.adapter.apply(\"getTooltipText\", text);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Source position\r\n\t * @param location Location in the cell\r\n\t * @return Adjusted position\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet baseInterval = this.baseInterval;\r\n\t\tlet timeUnit = baseInterval.timeUnit;\r\n\t\tlet count = baseInterval.count;\r\n\r\n\t\tlet date: Date = this.positionToDate(position);\r\n\r\n\t\t$time.round(date, timeUnit, count);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * If `findNearest` (third parameter) is set to `true`, the method will try\r\n\t * to locate nearest available data item if none is found directly under\r\n\t * `position`.\r\n\t *\r\n\t * @param series Series\r\n\t * @param position Position (px)\r\n\t * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n\t * @return Data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tlet value: number = this.positionToValue(position);\r\n\t\tlet date: Date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\tlet dataItem = dataItemsByAxis.getKey(date.getTime().toString());\r\n\r\n\t\t// todo: alternatively we can find closiest here\r\n\t\tif (!dataItem && findNearest) {\r\n\t\t\t/*\r\n\t\t\t// to the left\r\n\t\t\tlet leftCount = 0;\r\n\t\t\tlet leftDataItem: XYSeriesDataItem;\r\n\t\t\tlet leftDate = new Date(date.getTime());\r\n\r\n\t\t\twhile (leftDate.getTime() > this.minZoomed) {\r\n\t\t\t\tleftDate = $time.add(leftDate, this.baseInterval.timeUnit, -this.baseInterval.count);\r\n\t\t\t\tleftDataItem = dataItemsByAxis.getKey(leftDate.getTime().toString());\r\n\t\t\t\tif (leftDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tleftCount++;\r\n\t\t\t\tif (leftCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet rightCount = 0;\r\n\t\t\tlet rightDataItem: XYSeriesDataItem;\r\n\t\t\tlet rightDate = new Date(date.getTime());\r\n\t\t\twhile (rightDate.getTime() < this.maxZoomed) {\r\n\t\t\t\trightDate = $time.add(rightDate, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\trightDataItem = dataItemsByAxis.getKey(rightDate.getTime().toString());\r\n\t\t\t\tif (rightDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\trightCount++;\r\n\t\t\t\tif (rightCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (leftDataItem && !rightDataItem) {\r\n\t\t\t\treturn leftDataItem;\r\n\t\t\t}\r\n\t\t\telse if (!leftDataItem && rightDataItem) {\r\n\t\t\t\treturn rightDataItem;\r\n\t\t\t}\r\n\t\t\telse if (leftDataItem && rightDataItem) {\r\n\t\t\t\tif (leftCount < rightCount) {\r\n\t\t\t\t\treturn leftDataItem;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn rightDataItem;\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t\tlet key: \"dateX\" | \"dateY\";\r\n\r\n\t\t\tif (this.axisLetter == \"Y\") {\r\n\t\t\t\tkey = \"dateY\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tkey = \"dateX\";\r\n\t\t\t}\r\n\r\n\t\t\tdataItem = series.dataItems.getIndex(series.dataItems.findClosestIndex(date.getTime(), (x) => x[key].getTime(), \"any\"));\r\n\t\t}\r\n\r\n\t\treturn dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a formatted date based on position in axis scale.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\t// @todo Better format recognition\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this.dateFormatter.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param startDate Start date\r\n\t * @param endValue End date\r\n\t * @param skipRangeEvent Do not invoke events\r\n\t * @param instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean): void {\r\n\t\tstartDate = this.dateFormatter.parse(startDate);\r\n\t\tendDate = this.dateFormatter.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param field Field name\r\n\t * @return Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tif (source[\"_baseInterval\"]) {\r\n\t\t\tthis.baseInterval = source.baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @param local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\t\tif (this.snapTooltip) {\r\n\t\t\tlet actualDate = $time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1);\r\n\r\n\t\t\tlet actualTime = actualDate.getTime();\r\n\t\t\tlet closestDate: Date;\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\r\n\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!closestDate) {\r\n\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tif (closestDate) {\r\n\t\t\t\tlet closestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = $time.round(new Date(closestTime), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\tclosestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration / 2);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\r\n\t\t\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\r\n\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).getKey(closestTime.toString());\r\n\t\t\t\t\tlet point = series.showTooltipAtDataItem(dataItem);\r\n\t\t\t\t\tif (point) {\r\n\t\t\t\t\t\tseriesPoints.push({ series: series, point: point });\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\tthis.chart.sortSeriesTooltips(seriesPoints);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxis.ts","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { AxisBreak, IAxisBreakProperties, IAxisBreakAdapters, IAxisBreakEvents } from \"./AxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakProperties extends IAxisBreakProperties {\r\n\r\n\t/**\r\n\t * Category break starts on.\r\n\t */\r\n\tstartCategory?: string;\r\n\r\n\t/**\r\n\t * Category break ends on.\r\n\t */\r\n\tendCategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakEvents extends IAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CategoryAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisBreakAdapters extends IAxisBreakAdapters, ICategoryAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Base class to define \"breaks\" in axes\r\n * @see {@link ICategoryAxisBreakEvents} for a list of available events\r\n * @see {@link ICategoryAxisBreakAdapters} for a list of available Adapters\r\n */\r\nexport class CategoryAxisBreak extends AxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t */\r\n\tpublic _axisType: CategoryAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's start.\r\n\t *\r\n\t * @return Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get startPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedStartValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's end.\r\n\t *\r\n\t * @return Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get endPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedEndValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A category break starts on.\r\n\t *\r\n\t * @param value Start category\r\n\t */\r\n\tpublic set startCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"startCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start category\r\n\t */\r\n\tpublic get startCategory(): string {\r\n\t\treturn this.getPropertyValue(\"startCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * A category break ends on.\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"endCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.getPropertyValue(\"endCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * An index of start category.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set startValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"startValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get startValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"startCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"startValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * An index of end category or a end value.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set endValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"endValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get endValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"endCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"endValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxisBreak\"] = CategoryAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","/**\r\n * Category axis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisItemLocation, AxisDataItem, IAxisProperties, IAxisDataFields, IAxisAdapters, IAxisEvents, IAxisDataItemAdapters } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { SerialChart } from \"../types/SerialChart\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport { IDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Adapter } from \"../../core/utils/Adapter\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CategoryAxisDataItem extends AxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t */\r\n\tpublic adapter = new Adapter(this);\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tthis.setProperty(\"category\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this.adapter.isEnabled(\"category\")) {\r\n\t\t\treturn this.adapter.apply(\"category\", this.properties[\"category\"]);\r\n\t\t}\r\n\t\treturn this.properties[\"category\"];\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties[\"endCategory\"];\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet firstSeriesDataItem: XYSeriesDataItem;\r\n\t\t\t\tlet lastSeriesDataItem: XYSeriesDataItem;\r\n\t\t\t\t\r\n\t\t\t\tlet startIndex = this.positionToIndex(this.start);\r\n\t\t\t\tlet endIndex = this.positionToIndex(this.end);\r\n\r\n\t\t\t\tfor(let i = startIndex; i <= endIndex; i++){\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif(dataItem){\r\n\t\t\t\t\t\tlet fdi = this.getFirstSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(fdi){\r\n\t\t\t\t\t\t\tif (!firstSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (firstSeriesDataItem && fdi.index < firstSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet ldi = this.getLastSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(ldi){\r\n\t\t\t\t\t\t\tif (!lastSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (lastSeriesDataItem && ldi.index > lastSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (firstSeriesDataItem) {\r\n\t\t\t\t\tseries.startIndex = firstSeriesDataItem.index;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.start = this.start;\r\n\t\t\t\t}\r\n\t\t\t\tif (lastSeriesDataItem) {\r\n\t\t\t\t\tseries.endIndex = lastSeriesDataItem.index + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.end = this.end;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// range might not change, but axis breaks might.\r\n\t\t\t\tif (this.axisBreaks.length > 0) {\r\n\t\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the whole axis. Causes it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tlet dataCount: number = this.dataItems.length;\r\n\r\n\t\tlet startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n\t\tlet endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n\r\n\t\tif (this.renderer.invalid) {\r\n\t\t\tthis.renderer.validate();\r\n\t\t}\r\n\r\n\t\t// find frequency at which we'll show items\r\n\t\tlet maxCount: number = this.renderer.axisLength / this.renderer.minGridDistance;\r\n\t\tlet frequency: number = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n\r\n\t\tthis._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n\t\tthis._endIndex = Math.ceil(this.end * dataCount);\r\n\r\n\t\tthis.fixAxisBreaks();\r\n\r\n\t\tif (this._startIndex == this._endIndex) {\r\n\t\t\tthis._endIndex++;\r\n\t\t}\r\n\r\n\t\tthis._frequency = frequency;\r\n\r\n\t\tif (this.axisLength <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.maxZoomFactor = this.dataItems.length;\r\n\t\tif (this.dataItems.length <= 0) {\r\n\t\t\tthis.maxZoomFactor = 1;\r\n\t\t}\r\n\r\n\t\tthis.resetIterators();\r\n\r\n\t\t// it's important to use protected variables here, as getters will return 0 - length\r\n\t\t// TODO use iterator instead\r\n\t\t// @ todo: not solved cat axis item fading\r\n\t\tstartIndex = $math.max(0, this._startIndex - this._frequency);\r\n\t\tendIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n\r\n\t\tlet itemIndex = 0;\r\n\r\n\t\tfor (let i = 0; i < startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (i < this.dataItems.length) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (i / this._frequency == Math.round(i / this._frequency)) {\r\n\t\t\t\t\tlet axisBreak: CategoryAxisBreak = this.isInBreak(i);\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t//previously we disabled all before, but this is better for cpu\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex); // helps to solve shrinking\r\n\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.appendDataItem(this._lastDataItem);\r\n\t\tthis.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\tlet adjustedStartValue: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet adjustedEndValue: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: this._startIndex, end: this._endIndex })) {\r\n\r\n\t\t\t\tlet frequency: number = $math.fitToRange(Math.ceil(this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n\t\t\t\tlet itemIndex = 0;\r\n\t\t\t\t// TODO use iterator instead\r\n\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency) {\r\n\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(b);\r\n\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.validateBreaks();\r\n\t\tthis.validateAxisRanges();\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\r\n\t\tdataItem.point = renderer.positionToPoint(position);\r\n\r\n\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\tif (tick && !tick.disabled) {\r\n\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t}\r\n\r\n\t\tlet grid: Grid = dataItem.grid;\r\n\t\tif (grid && !grid.disabled) {\r\n\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet label: AxisLabel = dataItem.label;\r\n\t\tif (label && !label.disabled) {\r\n\t\t\t// theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" wont' work, which is not intuitive.\r\n\t\t\tif (!dataItem.isRange || label.text == undefined) {\r\n\t\t\t\tdataItem.text = dataItem.text;\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateLabelElement(label, position, endPosition);\r\n\r\n\t\t\tif (dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\r\n\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t * @param dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\t// creat a collection for fast access\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t// check if such category already exists\r\n\t\tlet existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\tif (existingDataItem && existingDataItem != dataItem) {\r\n\t\t\tthis.dataItems.remove(existingDataItem);\r\n\t\t}\r\n\r\n\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param index Index\r\n\t * @param location Location (0-1)\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif (index < startIndex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t// value to the right of break end\r\n\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// value to the left of break start\r\n\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn $math.round((index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param category Category\r\n\t * @return Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem.index;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param startCategory Start category\r\n\t * @param endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param start [description]\r\n\t * @param end [description]\r\n\t * @param startLocation [description]\r\n\t * @param endLocation [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param position Source position (px)\r\n\t * @param location Location within category (0-1)\r\n\t * @return Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns first series data item with specific category\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\t \r\n\t */\r\n\tpublic getFirstSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\t\tfor (let i = 0; i < series.dataItems.length; i++) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns last series data item with specific category.\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\t\t \r\n\t */\r\n\tpublic getLastSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\r\n\r\n\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\r\n\t\tfor (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\treturn dataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a data item from Series that corresponds to a specific absolute\r\n\t * position on the Axis.\r\n\t *\r\n\t * @param series Target series\r\n\t * @param position Position (px)\r\n\t * @return XYSeriesDataItem data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tif ($type.isNumber(position)) {\r\n\r\n\t\t\tlet index = this.positionToIndex(position);\r\n\r\n\t\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet category = dataItem.category;\r\n\t\t\t\tlet sdi: XYSeriesDataItem;\r\n\r\n\t\t\t\tlet seriesDataItem = series.dataItems.getIndex(index);\r\n\t\t\t\tif(seriesDataItem){\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryX == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryY == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\tif(!sdi){\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\tif(!sdi){\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(Math.abs(index - sdi.index) > Math.abs(index - dataItem.index)) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t//@todo\r\n\t\t\t\tif(findNearest){\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn sdi;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack key (?)\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\treturn this.positionToAngle(this.categoryToPosition(dataItem.categories[key], location));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn this.adapter.apply(\"getTooltipText\", dataItem.category);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\t\tif (position < 0) {\r\n\t\t\tposition = 0;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet difference: number = endIndex - startIndex;\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\tlet index: number = null;\r\n\r\n\t\t// in case we have some axis breaks\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartPosition: number = axisBreak.startPosition;\r\n\t\t\tlet breakEndPosition: number = axisBreak.endPosition;\r\n\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tbreakStartIndex = $math.max(breakStartIndex, startIndex);\r\n\t\t\tbreakEndIndex = $math.min(breakEndIndex, endIndex);\r\n\r\n\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\tdifference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\r\n\t\t\t// position to the right of break end\r\n\t\t\tif (position > breakEndPosition) {\r\n\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t}\r\n\t\t\t// position to the left of break start\r\n\t\t\telse if (position < breakStartPosition) {\r\n\r\n\t\t\t}\r\n\t\t\t// value within break\r\n\t\t\telse {\r\n\t\t\t\tlet breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n\t\t\t\tindex = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = Math.floor(position * difference + startIndex);\r\n\t\t}\r\n\t\tif (index >= endIndex) {\r\n\t\t\tindex--;\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxis.ts","/**\r\n * XY series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem, ISeriesProperties, ISeriesDataFields, ISeriesAdapters, ISeriesEvents } from \"./Series\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { CalculatedValue } from \"../../core/Component\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYSeriesDataItem extends SeriesDataItem {\r\n\r\n\t/**\r\n\t * [_minX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _minX: number;\r\n\r\n\t/**\r\n\t * [_maxX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _maxX: number;\r\n\r\n\t/**\r\n\t * [_minY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _minY: number;\r\n\r\n\t/**\r\n\t * [_maxY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t */\r\n\tprotected _maxY: number;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: XYSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYSeriesDataItem\";\r\n\r\n\t\tthis.values.valueX = { stack: 0 };\r\n\t\tthis.values.valueY = { stack: 0 };\r\n\t\tthis.values.openValueX = {};\r\n\t\tthis.values.openValueY = {};\r\n\r\n\t\tthis.values.dateX = {};\r\n\t\tthis.values.dateY = {};\r\n\t\tthis.values.openDateX = {};\r\n\t\tthis.values.openDateY = {};\r\n\r\n\t\tthis.setLocation(\"dateX\", 0.5, 0);\r\n\t\tthis.setLocation(\"dateY\", 0.5, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0.5, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0.5, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on X value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set valueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get valueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on Y value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set valueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get valueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on X date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set dateX(date: Date) {\r\n\t\tthis.setDate(\"dateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get dateX(): Date {\r\n\t\treturn this.getDate(\"dateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on Y date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set dateY(date: Date) {\r\n\t\tthis.setDate(\"dateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get dateY(): Date {\r\n\t\treturn this.getDate(\"dateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on X category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set categoryX(category: string) {\r\n\t\tthis.setCategory(\"categoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get categoryX(): string {\r\n\t\treturn this.categories.categoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on Y category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set categoryY(category: string) {\r\n\t\tthis.setCategory(\"categoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get categoryY(): string {\r\n\t\treturn this.categories.categoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on X value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set openValueX(value: number) {\r\n\t\tthis.setValue(\"openValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get openValueX(): number {\r\n\t\treturn this.values.openValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on Y value axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set openValueY(value: number) {\r\n\t\tthis.setValue(\"openValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get openValueY(): number {\r\n\t\treturn this.values.openValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on X date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set openDateX(date: Date) {\r\n\t\tthis.setDate(\"openDateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get openDateX(): Date {\r\n\t\treturn this.getDate(\"openDateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on Y date-based axis.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set openDateY(date: Date) {\r\n\t\tthis.setDate(\"openDateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get openDateY(): Date {\r\n\t\treturn this.getDate(\"openDateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on X category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set openCategoryX(category: string) {\r\n\t\tthis.setProperty(\"openCategoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryX(): string {\r\n\t\treturn this.categories.openCategoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on Y category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set openCategoryY(category: string) {\r\n\t\tthis.setProperty(\"openCategoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryY(): string {\r\n\t\treturn this.categories.openCategoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Return smallest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMin(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet min: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value < min || !$type.isNumber(min)) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn min;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Return biggest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMax(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet max: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value > max || !$type.isNumber(max)) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn max;\r\n\t\t//}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Defines property set for a [[XYSeries]] tooltip event that contains information about dataItem\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t */\r\n\tdataItem: XYSeriesDataItem;\r\n};\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for horizontal axis.\r\n\t */\r\n\tvalueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for vertical axis.\r\n\t */\r\n\tvalueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for horizontal axis.\r\n\t */\r\n\tcategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for vertical axis.\r\n\t */\r\n\tcategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for horizontal axis.\r\n\t */\r\n\tdateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for vertical axis.\r\n\t */\r\n\tdateY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for horizontal\r\n\t * axis.\r\n\t */\r\n\topenValueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for vertical\r\n\t * axis.\r\n\t */\r\n\topenValueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for horizontal axis.\r\n\t */\r\n\topenCategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for vertical axis.\r\n\t */\r\n\topenCategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for horizontal axis.\r\n\t */\r\n\topenDateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for vertical axis.\r\n\t */\r\n\topenDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tstacked?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the current cursor position\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t */\r\n\tcursorTooltipEnabled?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesEvents extends ISeriesEvents {\r\n\t/**\r\n\t * Invoked when series tooltip was shown on some particular data item\r\n\t */\r\n\ttooltipshownat: XYSeriesTooltipEvent;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[XYSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYSeriesAdapters extends ISeriesAdapters, IXYSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class XYSeries extends Series {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t */\r\n\tprotected _baseAxis: Axis;\r\n\r\n\t/**\r\n\t * Total data item count.\r\n\t */\r\n\tprotected _count: Dictionary;\r\n\r\n\t/**\r\n\t * Data item count in current selection.\r\n\t */\r\n\tprotected _scount: Dictionary;\r\n\r\n\t/**\r\n\t * [_xField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xField: string;\r\n\r\n\t/**\r\n\t * [_yField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yField: string;\r\n\r\n\t/**\r\n\t * [_xOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xOpenField: string;\r\n\r\n\t/**\r\n\t * [_yOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yOpenField: string;\r\n\r\n\t/**\r\n\t * [_tooltipXField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipXField: string;\r\n\r\n\t/**\r\n\t * [_tooltipYField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipYField: string;\r\n\r\n\t/**\r\n\t * [_xValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xValueFields: Array = [];\r\n\r\n\t/**\r\n\t * [_yValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yValueFields: Array = [];\r\n\r\n\t/**\r\n\t * Series which is stacked on top of this series, if any.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic stackedSeries: XYSeries;\r\n\r\n\r\n\t/**\r\n\t * dataitem of previously shown tooltip, used to avoid multiple tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _baseInterval:{[index:string]:ITimeInterval} = {};\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYSeries\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.cursorTooltipEnabled = true;\r\n\r\n\t\tthis.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\r\n\t\ttry {\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\r\n\t\t\tdataItem.events.disable();\r\n\t\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\r\n\t\t\tdataItem.events.enable();\r\n\r\n\t\t\tthis.setInitialWorkingValues(dataItem);\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis._chart.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tif (this.xAxis) {\r\n\t\t\tlet dataItemsX = this.dataItemsByAxis.getKey(this.xAxis.uid);\r\n\t\t\tif (dataItemsX) {\r\n\t\t\t\tdataItemsX.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.yAxis) {\r\n\t\t\tlet dataItemsY = this.dataItemsByAxis.getKey(this.yAxis.uid);\r\n\t\t\tif (dataItemsY) {\r\n\t\t\t\tdataItemsY.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\tlet xAxisFieldName: string = xAxis.axisFieldName;\r\n\t\tlet xField: $type.Keyof = <$type.Keyof>(xAxisFieldName + \"X\");\r\n\t\tlet xOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n\r\n\t\tlet yAxisFieldName: string = yAxis.axisFieldName;\r\n\t\tlet yField: $type.Keyof = <$type.Keyof>(yAxisFieldName + \"Y\");\r\n\t\tlet yOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n\r\n\t\tthis._xField = xField;\r\n\t\tthis._yField = yField;\r\n\r\n\t\tif (this.dataFields[xOpenField]) {\r\n\t\t\tthis._xOpenField = xOpenField;\r\n\t\t}\r\n\r\n\t\tif (this.dataFields[yOpenField]) {\r\n\t\t\tthis._yOpenField = yOpenField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[yOpenField] && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[xOpenField] && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\t\t\tif (!this._yOpenField) {\r\n\t\t\t\tthis._yOpenField = yField;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._xValueFields = [];\r\n\t\tthis._yValueFields = [];\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xOpenField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yOpenField);\r\n\t}\r\n\r\n\t/**\r\n\t * [axis description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param axis Axis\r\n\t * @param fields Fields (?)\r\n\t * @param field Field\r\n\t */\r\n\tprotected addValueField(axis: Axis, fields: Array, field: Key): void {\r\n\t\tif (axis instanceof ValueAxis) {\r\n\t\t\tif ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n\t\t\t\tfields.push(field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets category field from the category axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setCategoryAxisField(field: Key, axis: CategoryAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets date field from the date axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setDateAxisField(field: Key, axis: DateAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.date;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs after-draw tasks, e.g. creates masks.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.createMask();\r\n\t}\r\n\r\n\t/**\r\n\t * Create a mask for the series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic createMask(): void {\r\n\t\t// this mask from which we cut out ranges. does not work well if ranges overlap.\r\n\t\tif (this.mainContainer.mask) {\r\n\t\t\tlet path: string = this.getMaskPath();\r\n\r\n\t\t\t// @todo: this approach won't work well on circluar or other non x/y axes\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\t\tif (range.axisFill.fillPath) {\r\n\t\t\t\t\trange.axisFill.validate();\r\n\t\t\t\t\tpath += range.axisFill.fillPath;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.mainContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\treturn $path.rectToPath({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: this.xAxis.axisLength,\r\n\t\t\theight: this.yAxis.axisLength\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns axis data field to use.\r\n\t *\r\n\t * @param axis Axis\r\n\t * @return Field name\r\n\t */\r\n\tpublic getAxisField(axis: Axis): string {\r\n\t\tif (axis == this.xAxis) {\r\n\t\t\treturn this.xField;\r\n\t\t}\r\n\t\tif (axis == this.yAxis) {\r\n\t\t\treturn this.yField;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\r\n\t\t// this helps date axis to check which baseInterval we should use\r\n\t\tthis.xAxis.updateAxisBySeries();\r\n\t\tthis.yAxis.updateAxisBySeries();\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.xAxis.postProcessSeriesDataItems();\r\n\t\tthis.yAxis.postProcessSeriesDataItems();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataRange() {\r\n\t\tif (this.xAxis.dataRangeInvalid) {\r\n\t\t\tthis.xAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.dataRangeInvalid) {\r\n\t\t\tthis.yAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tsuper.validateDataRange();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.xAxis.invalid) {\r\n\t\t\tthis.xAxis.validate();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.invalid) {\r\n\t\t\tthis.yAxis.validate();\r\n\t\t}\r\n\r\n\t\tthis.y = this.yAxis.pixelY;\r\n\t\tthis.x = this.xAxis.pixelX;\r\n\r\n\r\n\t\tthis._showBullets = true;\r\n\t\tlet minBulletDistance: number = this.minBulletDistance;\r\n\t\tif ($type.isNumber(minBulletDistance)) {\r\n\t\t\tif (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n\t\t\t\tthis._showBullets = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._xAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._xAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._xAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._xAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.xAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no X axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xAxis = axis;\r\n\t\t\t}\r\n\t\t\treturn this._xAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._yAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._yAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._yAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._yAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.yAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no Y axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.yAxis = axis;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._yAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @param value Axis\r\n\t */\r\n\tpublic set baseAxis(value: Axis) {\r\n\t\tif (this._baseAxis != value) {\r\n\t\t\tthis._baseAxis = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get baseAxis(): Axis {\r\n\t\tif (!this._baseAxis) {\r\n\t\t\tif (this.yAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._baseAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._baseAxis;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes values after data items' were added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItems Data items\r\n\t */\r\n\tpublic processValues(working: boolean): void {\r\n\t\t// todo: if this is stacked, ensure that series to which this one can be stacked are processed before.\r\n\t\tsuper.processValues(working);\r\n\r\n\t\tlet dataItems = this.dataItems;\r\n\r\n\t\tlet minX = Infinity;\r\n\t\tlet maxX = - Infinity;\r\n\r\n\t\tlet minY = Infinity;\r\n\t\tlet maxY = - Infinity;\r\n\r\n\t\tlet startIndex = this.startIndex;\r\n\t\tlet endIndex = this.endIndex;\r\n\r\n\t\tif (!working) {\r\n\t\t\tstartIndex = 0;\r\n\t\t\tendIndex = this.dataItems.length;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tthis.getStackValue(dataItem, working);\r\n\r\n\t\t\tlet stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n\t\t\tlet stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n\r\n\t\t\tminX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n\t\t\tminY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n\r\n\t\t\tmaxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n\t\t\tmaxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n\r\n\t\t\t// if it's stacked, pay attention to stack value\r\n\t\t\tif (this.stacked) {\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared || this.start != 0 || this.end != 1) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip() {\r\n\t\tsuper.hideTooltip();\r\n\t\tthis.returnBulletDefaultState();\r\n\t\tthis._prevTooltipDataItem = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific position.\r\n\t *\r\n\t * @param xPosition X\r\n\t * @param yPosition Y\r\n\t */\r\n\tpublic showTooltipAtPosition(xPosition: number, yPosition: number): IPoint {\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\t\tif (this.visible && !this.isHiding && !this.isShowing) {\r\n\r\n\t\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\t\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet point = this.showTooltipAtDataItem(dataItem);\r\n\r\n\t\t\t\tif(point){\r\n\t\t\t\t\treturn point;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\t\tif (!this.tooltipText) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideTooltip();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific dataItem.\r\n\t *\r\n\t * @param dataItem\r\n\t */\r\n\tpublic showTooltipAtDataItem(dataItem: this[\"_dataItem\"]): IPoint {\r\n\t\tthis.returnBulletDefaultState(dataItem);\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tif (dataItem && dataItem.visible) {\r\n\r\n\t\t\t\tthis.updateLegendValue(dataItem);\r\n\t\t\t\tthis.tooltipDataItem = dataItem;\r\n\r\n\t\t\t\t// todo: add tooltipXField and tooltipYField.\r\n\t\t\t\tlet tooltipXField = this.tooltipXField;\r\n\t\t\t\tlet tooltipYField = this.tooltipYField;\r\n\r\n\t\t\t\tif ($type.hasValue((dataItem)[tooltipXField]) && $type.hasValue((dataItem)[tooltipYField])) {\r\n\r\n\t\t\t\t\tlet tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, dataItem.locations[tooltipXField], dataItem.locations[tooltipYField]);\r\n\r\n\t\t\t\t\tif (tooltipPoint) {\r\n\r\n\t\t\t\t\t\tthis.tooltipX = tooltipPoint.x;\r\n\t\t\t\t\t\tthis.tooltipY = tooltipPoint.y;\r\n\r\n\t\t\t\t\t\tif (this._prevTooltipDataItem != dataItem) {\r\n\t\t\t\t\t\t\tthis.dispatchImmediately(\"tooltipshownat\", {\r\n\t\t\t\t\t\t\t\ttype: \"tooltipshownat\",\r\n\t\t\t\t\t\t\t\ttarget: this,\r\n\t\t\t\t\t\t\t\tdataItem: dataItem\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (let a of dataItem.bullets) {\r\n\t\t\t\t\t\t\tlet bullet = a[1]\r\n\t\t\t\t\t\t\tbullet.isHover = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this.showTooltip()) {\r\n\t\t\t\t\t\t\treturn $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * returns default state to bullets when tooltip is shown at some other data item or hidden\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected returnBulletDefaultState(dataItem?: XYSeriesDataItem) {\r\n\t\tif (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n\t\t\tfor (let a of this._prevTooltipDataItem.bullets) {\r\n\t\t\t\tlet bullet = a[1];\r\n\t\t\t\tif (!bullet.isDisposed()) {\r\n\t\t\t\t\tbullet.isHover = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._prevTooltipDataItem = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet) {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: XYSeriesDataItem = bullet.dataItem;\r\n\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bullet.xField;\r\n\t\tif (!$type.hasValue(xField)) {\r\n\t\t\txField = this.xField;\r\n\t\t}\r\n\r\n\t\tlet yField: string = bullet.yField;\r\n\t\tif (!$type.hasValue(yField)) {\r\n\t\t\tyField = this.yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\r\n\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\tif (point) {\r\n\t\t\t\tlet x: number = point.x;\r\n\t\t\t\tlet y: number = point.y;\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationX) && this.xOpenField != this.xField) {\r\n\t\t\t\t\tlet openX: number = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\t\tx = x - (x - openX) * bullet.locationX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationY) && this.yOpenField != this.yField) {\r\n\t\t\t\t\tlet openY: number = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\t\ty = y - (y - openY) * bullet.locationY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbullet.moveTo({ x: x, y: y });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationX;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationY;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @param stacked Can be stacked?\r\n\t */\r\n\tpublic set stacked(stacked: boolean) {\r\n\t\tthis.setPropertyValue(\"stacked\", stacked, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Can be stacked?\r\n\t */\r\n\tpublic get stacked(): boolean {\r\n\t\treturn this.getPropertyValue(\"stacked\");\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position?\r\n\t *\r\n\t * @default false\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param duration Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axis ranges\r\n\t\t\tif ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n\t\t\t\tfor (let i = 0, len = config.axisRanges.length; i < len; i++) {\r\n\t\t\t\t\tlet range = config.axisRanges[i];\r\n\t\t\t\t\tif (!$type.hasValue(range.type)) {\r\n\t\t\t\t\t\trange.type = \"AxisDataItem\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.axis);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Parse date fields based on the series fields\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tthis.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tlet x: number = this.xAxis.getX(dataItem, xKey, locationX);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY);\r\n\r\n\t\tx = $math.fitToRange(x, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t *\r\n\t * If set to `true` (default), the tooltips set for all series item's\r\n\t * elements like columns and bullets will be automatically shown\r\n\t * when [[XYCursor]] passes over category/date, even if its not hovered\r\n\t * directly over the item.\r\n\t *\r\n\t * Set this to `false` to disable such behavior and display item-specific\r\n\t * tooltips only when hovered directly over them\r\n\t *\r\n\t * @default true\r\n\t * @param value Display tooltip?\r\n\t */\r\n\tpublic set cursorTooltipEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Display tooltip?\r\n\t */\r\n\tpublic get cursorTooltipEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorTooltipEnabled\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/XYSeries.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { getInteraction, IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IInteractionObjectEvents } from \"../../core/interaction/InteractionObjectEvents\";\r\nimport { IPoint, } from \"../../core/defs/IPoint\";\r\nimport { Chart } from \"../Chart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Cursor]].\r\n */\r\nexport interface ICursorProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Cursor]].\r\n */\r\nexport interface ICursorEvents extends IContainerEvents {\r\n\r\n\t/**\r\n\t * Invoked when position of cursor changes.\r\n\t */\r\n\tcursorpositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts selecting a range with a cursor, e.g. presses\r\n\t * down mouse button and drags the cursor.\r\n\t */\r\n\tselectstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when selection has ended, e.g. user releases mouse button.\r\n\t */\r\n\tselectended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts zooming using cursor.\r\n\t */\r\n\tzoomstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user clicked to start zooming/panning/selecting but haven't\r\n\t * finished the operation.\r\n\t */\r\n\tbehaviorcanceled: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done zooming using cursor.\r\n\t */\r\n\tzoomended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts panning using cursor.\r\n\t */\r\n\tpanstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done panning using cursor.\r\n\t */\r\n\tpanended: {};\r\n\r\n\t/**\r\n\t * Invoked when user is panning using cursor.\r\n\t */\r\n\tpanning: {};\r\n}\r\n\r\n/**\r\n * Defines adapters for [[Cursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICursorAdapters extends IContainerAdapters, ICursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Main Cursor class with common cursor functionality.\r\n *\r\n * Chart-specific cursors must extend this class.\r\n *\r\n * @see {@link ICursorEvents} for a list of available events\r\n * @see {@link ICursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class Cursor extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICursorEvents;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection started.\r\n\t */\r\n\tpublic downPoint: IPoint;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection ended.\r\n\t */\r\n\tpublic upPoint: IPoint;\r\n\r\n\t/**\r\n\t * Current cursor position during selection.\r\n\t *\r\n\t * @todo Better description\r\n\t */\r\n\tpublic point: IPoint = { x: 0, y: 0 };\r\n\r\n\t/**\r\n\t * Relative horizontal position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic xPosition: number;\r\n\r\n\t/**\r\n\t * Relative vertical position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic yPosition: number;\r\n\r\n\t/**\r\n\t * [_usesSelection description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _usesSelection: boolean;\r\n\r\n\t/**\r\n\t * What to do when user pressed down and drags cursor: zoom or select.\r\n\t */\r\n\tprotected _generalBehavior: \"zoom\" | \"select\" | \"pan\"; // todo: draw\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: Chart;\r\n\r\n\t/**\r\n\t * Specifies the rules when cursor needs to be moved or hidden.\r\n\t */\r\n\tprotected _stick: \"hard\" | \"soft\" | \"none\" = \"none\";\r\n\r\n\t/**\r\n\t * A screen point that cursor is \"stuck\" to.\r\n\t */\r\n\tprotected _stickPoint: IPoint;\r\n\r\n\t/**\r\n\t * non-modified down point\r\n\t * @ignore\r\n\t */\r\n\tprotected _downPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * non-modified up point\r\n\t * @ignore\r\n\t */\r\n\tprotected _upPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"Cursor\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\t\tthis.shouldClone = false;\r\n\r\n\t\tthis.hide(0);\r\n\r\n\t\tthis.trackable = true;\r\n\t\tthis.clickable = true;\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// Add events on body to trigger down and up events (to start zooming or\r\n\t\t// selection)\r\n\t\tconst interaction = getInteraction();\r\n\t\tthis._disposers.push(interaction.body.events.on(\"down\", this.handleCursorDown, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"up\", this.handleCursorUp, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"track\", this.handleCursorMove, this));\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handle pointer movement in document and update cursor position as needed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleCursorMove(event: IInteractionObjectEvents[\"track\"]): IPoint {\r\n\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t * @param stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\tthis.point = point;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// hide cursor if it's out of bounds\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.show(0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// unless we are selecting (mouse is down)\r\n\t\t\t\tif (!this.downPoint) {\r\n\t\t\t\t\tthis.hide(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tswitch (this._generalBehavior) {\r\n\t\t\t\tcase \"zoom\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"zoomended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"select\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"selectended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pan\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"panended\");\r\n\t\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t\tthis.updateSelection();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\r\n\t\tif (!this.interactionsEnabled || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Get local point\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tthis._downPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis._upPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer, IDisposer } from \"../../core/utils/Disposer\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { XYSeries, IXYSeriesEvents } from \"../series/XYSeries\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { IInteractionEvents, getInteraction } from \"../../core/interaction/Interaction\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYCursor]].\r\n */\r\nexport interface IXYCursorProperties extends ICursorProperties {\r\n\r\n\t/**\r\n\t * Cursor's behavior when moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally; (default)\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * @default \"zoomX\"\r\n\t */\r\n\tbehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineX?: boolean;\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineY?: boolean;\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t */\r\n\tsnapToSeries: XYSeries;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYCursor]].\r\n */\r\nexport interface IXYCursorEvents extends ICursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYCursorAdapters extends ICursorAdapters, IXYCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\tprotected _snapToDisposer: IDisposer;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYCursor\";\r\n\r\n\t\t// Defaults\r\n\t\tthis.behavior = \"zoomX\";\r\n\r\n\t\tthis.maxPanOut = 0.1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Create selection element\r\n\t\tlet selection: Sprite = this.createChild(Sprite);\r\n\t\tselection.shouldClone = false;\r\n\t\tselection.fillOpacity = 0.2;\r\n\t\tselection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tselection.isMeasured = false;\r\n\t\tselection.interactionsEnabled = false;\r\n\t\tthis.selection = selection;\r\n\t\tthis._disposers.push(this.selection);\r\n\r\n\t\t// Create cursor's vertical line\r\n\t\tlet lineX: Sprite = this.createChild(Sprite);\r\n\t\tlineX.shouldClone = false;\r\n\t\tlineX.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineX.fill = color();\r\n\t\tlineX.strokeDasharray = \"3,3\";\r\n\t\tlineX.isMeasured = false;\r\n\t\tlineX.strokeOpacity = 0.4;\r\n\t\tlineX.interactionsEnabled = false;\r\n\t\tlineX.y = 0;// important\r\n\t\tthis.lineX = lineX;\r\n\t\tthis._disposers.push(this.lineX);\r\n\r\n\t\t// Create cursor's horizontal line\r\n\t\tlet lineY: Sprite = this.createChild(Sprite);\r\n\t\tlineY.shouldClone = false;\r\n\t\tlineY.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineY.fill = color();\r\n\t\tlineY.strokeDasharray = \"3,3\";\r\n\t\tlineY.isMeasured = false;\r\n\t\tlineY.strokeOpacity = 0.4;\r\n\t\tlineY.interactionsEnabled = false;\r\n\t\tlineY.x = 0; // important\r\n\t\tthis.lineY = lineY;\r\n\t\tthis._disposers.push(this.lineY);\r\n\r\n\t\t// Add handler for size changes\r\n\t\tthis.events.on(\"sizechanged\", this.updateSize, this, false);\r\n\r\n\t\tthis._disposers.push(this._lineX);\r\n\t\tthis._disposers.push(this._lineY);\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.mask = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tif ((this.snapToSeries && !this.snapToSeries.isHidden)) {\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.updateLinePositions(point);\r\n\t\t}\r\n\r\n\t\tif (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tthis.getPanningRanges();\r\n\t\t\t\tthis.dispatch(\"panning\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\t\tpoint = this.fixPoint(this.point);\r\n\r\n\t\tif (this.lineX && this.lineX.visible && !this.xAxis) {\r\n\t\t\tthis.lineX.x = point.x;\r\n\t\t}\r\n\t\tif (this.lineY && this.lineY.visible && !this.yAxis) {\r\n\t\t\tthis.lineY.y = point.y;\r\n\t\t}\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.downPoint = { x: point.x, y: point.y };\r\n\r\n\t\t\t\tthis.updatePoint(point);\r\n\r\n\t\t\t\t//this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n\r\n\t\t\t\tthis.point.x = this.downPoint.x;\r\n\t\t\t\tthis.point.y = this.downPoint.y;\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\t\t\t\tlet selectionX: number = this.downPoint.x;\r\n\t\t\t\tlet selectionY: number = this.downPoint.y;\r\n\r\n\t\t\t\tif (this._usesSelection) {\r\n\t\t\t\t\tselection.x = selectionX;\r\n\t\t\t\t\tselection.y = selectionY;\r\n\t\t\t\t\tselection.path = \"\";\r\n\t\t\t\t\tselection.show();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerDownReal(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.downPoint = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t\tif (this.lineX) {\r\n\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > getInteraction().getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tif (this.downPoint) {\r\n\t\t\t\tthis.upPoint = point;\r\n\r\n\t\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\t\tthis.getRanges();\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerUpReal(point);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.selection.hide(0);\r\n\t\t}\r\n\t\tthis.downPoint = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\tthis.selection;\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Behavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._xAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return X axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\treturn this._xAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to Y [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis Y axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tif (this._yAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._yAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\treturn this._yAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet x: number = point.x;\r\n\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.x = x;\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineX.x = x;\r\n\t\t\t\tlet width: number = endPoint.x - startPoint.x;\r\n\t\t\t\tthis.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when Y axis changes position or scale.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet y: number = point.y;\r\n\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.y = y;\r\n\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineY.y = y;\r\n\t\t\t\tlet height: number = endPoint.y - startPoint.y;\r\n\t\t\t\tthis.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use for X axis.\r\n\t *\r\n\t * @param lineX Line\r\n\t */\r\n\tpublic set lineX(lineX: Sprite) {\r\n\t\tif (lineX) {\r\n\t\t\tlineX.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineX.interactionsEnabled = false;\r\n\t\t\tlineX.parent = this;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineX.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineX(): Sprite {\r\n\t\treturn this._lineX.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use Y axis.\r\n\t *\r\n\t * @param lineY Line\r\n\t */\r\n\tpublic set lineY(lineY: Sprite) {\r\n\t\tif (lineY) {\r\n\t\t\tlineY.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineY.parent = this;\r\n\t\t\tlineY.interactionsEnabled = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineY.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineY(): Sprite {\r\n\t\treturn this._lineY.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A selection element ([[Sprite]]).\r\n\t *\r\n\t * @param selection Selection rectangle\r\n\t */\r\n\tpublic set selection(selection: Sprite) {\r\n\t\tthis._selection = selection;\r\n\t\tif (selection) {\r\n\t\t\tselection.element = this.paper.add(\"path\");\r\n\t\t\tselection.parent = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Selection rectangle\r\n\t */\r\n\tpublic get selection(): Sprite {\r\n\t\treturn this._selection;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n\t * with real references.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies to which series cursor lines should be snapped. Works when one\r\n\t * of the axis is `DateAxis` or `CategoryAxis`. Won't work if both axes are\r\n\t * `ValueAxis`.\r\n\t *\r\n\t * @param {XYSeries}\r\n\t */\r\n\tpublic set snapToSeries(series: XYSeries) {\r\n\t\tif (this.setPropertyValue(\"snapToSeries\", series)) {\r\n\t\t\tif (this._snapToDisposer) {\r\n\t\t\t\tthis._snapToDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (series) {\r\n\t\t\t\tthis._snapToDisposer = series.events.on(\"tooltipshownat\", this.handleSnap, this, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYSeries}\r\n\t */\r\n\tpublic get snapToSeries(): XYSeries {\r\n\t\treturn this.getPropertyValue(\"snapToSeries\");\r\n\t}\r\n\r\n\t/**\r\n\t * [handleSnap description]\r\n\t *\r\n\t * @ignore\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleSnap() {\r\n\r\n\t\tlet series = this.snapToSeries;\r\n\t\tlet y = series.tooltipY;\r\n\t\tlet x = series.tooltipX;// - this.pixelWidth;\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tif (this.xAxis.renderer.opposite) {\r\n\t\t\t\ty -= this.pixelHeight;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.point = { x: x, y: y };\r\n\t\tthis.getPositions();\r\n\r\n\t\tx -= this.pixelWidth;\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tif (this.yAxis.renderer.opposite) {\r\n\t\t\t\tx += this.pixelWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet tooltip = series.tooltip;\r\n\t\tlet duration = tooltip.animationDuration;\r\n\t\tlet easing = tooltip.animationEasing;\r\n\r\n\t\tif (series.baseAxis == series.xAxis) {\r\n\t\t\tseries.yAxis.showTooltipAtPosition(this.yPosition);\r\n\t\t}\r\n\r\n\t\tif (series.baseAxis == series.yAxis) {\r\n\t\t\tseries.xAxis.showTooltipAtPosition(this.xPosition);\r\n\t\t}\r\n\r\n\t\tthis.lineX.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\tthis.lineY.animate([{ property: \"x\", to: x }], duration, easing);\r\n\r\n\t\tif (!this.xAxis) {\r\n\t\t\tthis.lineX.animate([{ property: \"x\", to: x }], duration, easing);\r\n\t\t}\r\n\t\tif (!this.yAxis) {\r\n\t\t\tthis.lineY.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYCursor\"] = XYCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/XYCursor.ts","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar, IScrollbarProperties, IScrollbarAdapters, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarProperties extends IScrollbarProperties { }\r\n\r\n/**\r\n * Defines events for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarEvents extends IScrollbarEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChartScrollbar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartScrollbarAdapters extends IScrollbarAdapters, IXYChartScrollbarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A special version of the Scrollbar that has an XY chart in it.\r\n *\r\n * Used mainly as an advanced scrollbar with a preview for other XY charts.\r\n *\r\n * However, can be used as standalone element.\r\n *\r\n * @see {@link IXYChartScrollbarEvents} for a list of available events\r\n * @see {@link IXYChartScrollbarAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class XYChartScrollbar extends Scrollbar {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChartScrollbarEvents;\r\n\r\n\t/**\r\n\t * An [[XYSeries]] used to draw a graph on the Scrollbar.\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * A chart element Scrollbar is for.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart instance that shows mini-chart within Scrollbar.\r\n\t */\r\n\tprotected _scrollbarChart: XYChart;\r\n\r\n\t/**\r\n\t * [_unselectedOverlay description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _unselectedOverlay: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartScrollbar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\tlet scrollbarChart: XYChart = this.createChild(XYChart);\r\n\t\tscrollbarChart.shouldClone = false;\r\n\t\tscrollbarChart.margin(0, 0, 0, 0);\r\n\t\tscrollbarChart.padding(0, 0, 0, 0);\r\n\t\tscrollbarChart.interactionsEnabled = false;\r\n\r\n\t\tthis._scrollbarChart = scrollbarChart;\r\n\t\tthis._disposers.push(this._scrollbarChart);\r\n\r\n\t\tthis.minHeight = 60;\r\n\t\tthis.minWidth = 60;\r\n\r\n\t\tlet unselectedOverlay: Sprite = this.createChild(Sprite);\r\n\t\tunselectedOverlay.shouldClone = false;\r\n\t\tunselectedOverlay.setElement(this.paper.add(\"path\"));\r\n\t\tunselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n\t\tunselectedOverlay.fillOpacity = 0.8;\r\n\t\tunselectedOverlay.interactionsEnabled = false;\r\n\t\tunselectedOverlay.isMeasured = false;\r\n\t\tunselectedOverlay.toBack();\r\n\t\tthis._unselectedOverlay = unselectedOverlay;\r\n\t\tthis._disposers.push(this._unselectedOverlay);\r\n\r\n\t\tscrollbarChart.toBack();\r\n\r\n\t\tthis.background.cornerRadius(0, 0, 0, 0);\r\n\r\n\t\tlet thumbBackground = this.thumb.background;\r\n\t\tthumbBackground.cornerRadius(0, 0, 0, 0);\r\n\t\tthumbBackground.fillOpacity = 0;\r\n\t\tthumbBackground.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\tlet hoverState = thumbBackground.states.getKey(\"hover\");\r\n\t\tif (hoverState) {\r\n\t\t\thoverState.properties.fillOpacity = 0.2;\r\n\t\t}\r\n\r\n\t\tlet downState = thumbBackground.states.getKey(\"down\");\r\n\t\tif (downState) {\r\n\t\t\tdownState.properties.fillOpacity = 0.4;\r\n\t\t}\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of series that are used to draw graph(s) on the scrollbar.\r\n\t *\r\n\t * @readonly\r\n\t * @return Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n\t\t\tthis._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.newValue;\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\tscrollbarChart.zoomOutButton.disabled = true;\r\n\r\n\t\tthis.chart = sourceSeries.chart;\r\n\r\n\t\tlet addXAxis: boolean = true;\r\n\t\tlet addYAxis: boolean = true;\r\n\r\n\t\t// check if we haven't added clone of x or y axis before\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series != sourceSeries) {\r\n\t\t\t\tif (series.xAxis == sourceSeries.xAxis) {\r\n\t\t\t\t\taddXAxis = false;\r\n\t\t\t\t}\r\n\t\t\t\tif (series.yAxis == sourceSeries.yAxis) {\r\n\t\t\t\t\taddYAxis = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet series: XYSeries = sourceSeries.clone();\r\n\r\n\t\tif (addXAxis) {\r\n\r\n\t\t\tlet xAxis = sourceSeries.xAxis.clone();\r\n\t\t\tscrollbarChart.xAxes.moveValue(xAxis);\r\n\t\t\txAxis.title.disabled = true;\r\n\t\t\txAxis.rangeChangeDuration = 0;\r\n\t\t\txAxis.id = sourceSeries.uid;\r\n\t\t\txAxis.title.disabled = true;\r\n\r\n\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.yAxis = yAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\tif (this._scrollbarChart) {\r\n\t\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Scrollbar, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { XYCursor, IXYCursorEvents } from \"../cursors/XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IDisposer, MultiDisposer, MutableValueDisposer, Disposer } from \"../../core/utils/Disposer\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\n\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: XYChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart]].\r\n */\r\nexport interface IXYChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[XYChart]].\r\n */\r\nexport interface IXYChartProperties extends ISerialChartProperties {\r\n\r\n\t/**\r\n\t * A container that is used as a maske for bullets so that they can't\r\n\t * \"spill\" outside of the plot area.\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t *\r\n\t * @default \"none\"\r\n\t */\r\n\tmouseWheelBehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Specifies if chart should arrange series tooltips so that they won't\r\n\t * overlap.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tarrangeTooltips?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart]].\r\n */\r\nexport interface IXYChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartAdapters extends ISerialChartAdapters, IXYChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates an XY chart, and any derivative chart, like Serial, Date-based, etc.\r\n *\r\n * Basically this is a chart type, that is used to display any chart\r\n * information in a square plot area.\r\n *\r\n * The horizontal and vertical scale is determined by the type of Axis.\r\n *\r\n * The plot types are determined by type of Series.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * let series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"XYChart\");\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * var series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Category axis\r\n * \t\"xAxes\": [{\r\n * \t\t\"type\": \"CategoryAxis\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Value axis\r\n * \t\"yAxes\": [{\r\n * \t\t\"type\": \"ValueAxis\"\r\n * \t}],\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"ColumnSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"categoryX\": \"country\",\r\n * \t\t\t\"valueY\": \"visits\"\r\n * \t\t},\r\n * \t\t\"name\": \"Web Traffic\"\r\n * \t}],\r\n *\r\n * \t// Cursor\r\n * \t\"cursor\": {},\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"USA\",\r\n * \t\t\"visits\": 3025\r\n * \t}, {\r\n * \t\t\"country\": \"China\",\r\n * \t\t\"visits\": 1882\r\n * \t}, {\r\n * \t\t\"country\": \"Japan\",\r\n * \t\t\"visits\": 1809\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"XYChart\");\r\n * ```\r\n *\r\n *\r\n * @see {@link IXYChartEvents} for a list of available Events\r\n * @see {@link IXYChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: XYSeries;\r\n\r\n\t/**\r\n\t * A list of horizontal axes.\r\n\t */\r\n\tprotected _xAxes: List>;\r\n\r\n\t/**\r\n\t * A list of vertical axes.\r\n\t */\r\n\tprotected _yAxes: List>;\r\n\r\n\t/**\r\n\t * A container that holds vertical axes and plot area.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic yAxesAndPlotContainer: Container\r\n\r\n\t/**\r\n\t * A container that holds top axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic topAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds bottom axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic bottomAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds left axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic leftAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds right axes.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic rightAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container for plot area.\r\n\t *\r\n\t * @type {Container}\t \r\n\t */\r\n\tpublic plotContainer: Container;\r\n\r\n\t/**\r\n\t * A reference to horizontal [[Scrollbar]].\r\n\t */\r\n\tprotected _scrollbarX: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to vertical [[Scrollbar]].\r\n\t */\r\n\tprotected _scrollbarY: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to chart's cursor.\r\n\t */\r\n\tpublic _cursor: XYCursor;\r\n\r\n\t/**\r\n\t * A container that chart's cursor is placed in.\r\n\t */\r\n\tprotected _cursorContainer: Container;\r\n\r\n\t/**\r\n\t * Defines the type of horizontal axis rederer.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX = AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis rederer.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY = AxisRendererY;\r\n\r\n\t/**\r\n\t * Defines the type horizontal axis renderer.\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis renderer.\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererY;\r\n\r\n\t/**\r\n\t * A button which is used to zoom out the chart.\r\n\t */\r\n\tprotected _zoomOutButton: Button;\r\n\r\n\t/**\r\n\t * An element that is used as a mask to contain bullets from spilling out of\r\n\t * the plot area.\r\n\t */\r\n\tprotected _bulletMask: Sprite;\r\n\r\n\r\n\tprotected _panStartXRange: IRange;\r\n\r\n\tprotected _panStartYRange: IRange;\r\n\r\n\tprotected _panEndXRange: IRange;\r\n\r\n\tprotected _panEndYRange: IRange;\r\n\r\n\tprotected _mouseWheelDisposer: IDisposer;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYChart\";\r\n\r\n\t\t// Set defaults\r\n\t\t//this.margin(10, 10, 10, 10);\r\n\t\tthis.maskBullets = true;\r\n\t\tthis.arrangeTooltips = true;\r\n\r\n\t\t// Create main chart container\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.layout = \"vertical\";\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Create top axes container\r\n\t\tlet topAxesCont = chartContainer.createChild(Container);\r\n\t\ttopAxesCont.shouldClone = false;\r\n\t\ttopAxesCont.layout = \"vertical\";\r\n\t\ttopAxesCont.width = percent(100);\r\n\t\ttopAxesCont.zIndex = 1;\r\n\t\tthis.topAxesContainer = topAxesCont;\r\n\r\n\t\t// Create vertical axes and plot area container\r\n\t\t// Plot area and vertical axes share the whole width of the chart,\r\n\t\t// so we need to put then into a separate container so that layouting\r\n\t\t// engine takes care of the positioning\r\n\t\tlet yAxesAndPlotCont = chartContainer.createChild(Container);\r\n\t\tyAxesAndPlotCont.shouldClone = false;\r\n\t\tyAxesAndPlotCont.layout = \"horizontal\";\r\n\t\tyAxesAndPlotCont.width = percent(100);\r\n\t\tyAxesAndPlotCont.height = percent(100);\r\n\t\tyAxesAndPlotCont.zIndex = 0;\r\n\t\tthis.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n\r\n\t\t// Create a container for bottom axes\r\n\t\tlet bottomAxesCont = chartContainer.createChild(Container);\r\n\t\tbottomAxesCont.shouldClone = false;\r\n\t\tbottomAxesCont.width = percent(100);\r\n\t\tbottomAxesCont.layout = \"vertical\";\r\n\t\tbottomAxesCont.zIndex = 1;\r\n\t\tthis.bottomAxesContainer = bottomAxesCont;\r\n\r\n\t\t// Create a container for left-side axes\r\n\t\tlet leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tleftAxesCont.shouldClone = false;\r\n\t\tleftAxesCont.layout = \"horizontal\";\r\n\t\tleftAxesCont.height = percent(100);\r\n\t\tleftAxesCont.contentAlign = \"right\";\r\n\t\tleftAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tleftAxesCont.zIndex = 1;\r\n\t\tthis.leftAxesContainer = leftAxesCont;\r\n\r\n\t\t// Create a container for plot area\r\n\t\tlet plotCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tplotCont.shouldClone = false;\r\n\t\tplotCont.height = percent(100);\r\n\t\tplotCont.width = percent(100);\r\n\t\t// Create transparend background for plot container so that hover works\r\n\t\t// on all of it\r\n\t\tplotCont.background.fillOpacity = 0;\r\n\t\tthis.plotContainer = plotCont;\r\n\r\n\t\t// must go below plot container\r\n\t\tthis.mouseWheelBehavior = \"none\";\r\n\r\n\t\tthis._cursorContainer = plotCont;\r\n\r\n\t\t// Create a container for right-side axes\r\n\t\tlet rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\trightAxesCont.shouldClone = false;\r\n\t\trightAxesCont.layout = \"horizontal\";\r\n\t\trightAxesCont.height = percent(100);\r\n\t\trightAxesCont.zIndex = 1;\r\n\t\trightAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tthis.rightAxesContainer = rightAxesCont;\r\n\r\n\t\tthis.seriesContainer.parent = plotCont;\r\n\t\tthis.bulletsContainer.parent = plotCont;\r\n\r\n\t\tlet zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n\t\tzoomOutButton.shouldClone = false;\r\n\t\tzoomOutButton.align = \"right\";\r\n\t\tzoomOutButton.valign = \"top\";\r\n\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\tzoomOutButton.marginTop = 5;\r\n\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\tzoomOutButton.hide(0);\r\n\t\tthis.zoomOutButton = zoomOutButton;\r\n\r\n\t\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererX();\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateXAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new vertical (Y) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processYAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererY();\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateYAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.zoomAxes(this.xAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarX, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n\t * zoomed out or not.\r\n\t */\r\n\tprotected toggleZoomOutButton() {\r\n\t\tif (this.zoomOutButton) {\r\n\t\t\tlet show = false;\r\n\r\n\t\t\t$iter.eachContinue(this.xAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\t$iter.eachContinue(this.yAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tif (!this.seriesAppeared) {\r\n\t\t\t\tshow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (show) {\r\n\t\t\t\tthis.zoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.zoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * moved this check to a separate method so that we could override it in TreeMapSeries\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\tlet appeared: boolean = false;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (!series.appeared) {\r\n\t\t\t\tappeared = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn appeared;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.zoomAxes(this.yAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarY, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a relative scrollbar whenever data range of the axis changes.\r\n\t *\r\n\t * @param scrollbar Scrollbar instance\r\n\t * @param range New data (values) range of the axis\r\n\t */\r\n\tprotected updateScrollbar(scrollbar: Scrollbar, range: IRange): void {\r\n\t\tif (scrollbar) {\r\n\t\t\tscrollbar.skipRangeEvents();\r\n\t\t\tscrollbar.start = range.start;\r\n\t\t\tscrollbar.end = range.end;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a common range of values between a list of axes.\r\n\t *\r\n\t * This is used to synchronize the zoom between multiple axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axes A list of axes\r\n\t * @return Common value range\r\n\t */\r\n\tpublic getCommonAxisRange(axes: List): IRange {\r\n\t\tlet start: Optional;\r\n\t\tlet end: Optional;\r\n\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tlet axisStart = axis.start;\r\n\t\t\tlet axisEnd = axis.end;\r\n\r\n\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\taxisStart = 1 - axis.end;\r\n\t\t\t\taxisEnd = 1 - axis.start;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(start) || (axisStart < start)) {\r\n\t\t\t\tstart = axisStart;\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(end) || (axisEnd > end)) {\r\n\t\t\t\tend = axisEnd;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn { start: start, end: end };\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.topAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.bottomAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.rightAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.leftAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n\t * and containers for placement.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\t// Value axis does not use data directly, only category axis does\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\tthis._dataUsers.moveValue(axis);\r\n\t\t}\r\n\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\r\n\t\trenderer.gridContainer.parent = this.plotContainer;\r\n\t\trenderer.gridContainer.toBack();\r\n\r\n\t\trenderer.breakContainer.parent = this.plotContainer;\r\n\t\trenderer.breakContainer.toFront();\r\n\t\trenderer.breakContainer.zIndex = 10;\r\n\r\n\t\taxis.addDisposer(new Disposer(() => {\r\n\t\t\tthis.dataUsers.removeValue(axis);\r\n\t\t}))\r\n\r\n\t\tthis.plotContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\taxis.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * A list of horizontal (X) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get xAxes(): List> {\r\n\t\tif (!this._xAxes) {\r\n\t\t\tthis._xAxes = new List>();\r\n\t\t\tthis._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n\t\t\tthis._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._xAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAxisRemoval(event: IListEvents[\"removed\"]) {\r\n\t\tlet axis = event.oldValue;\r\n\t\tthis.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n\t\tif (axis.autoDispose) {\r\n\t\t\taxis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of vertical (Y) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get yAxes(): List> {\r\n\t\tif (!this._yAxes) {\r\n\t\t\tthis._yAxes = new List>();\r\n\t\t\tthis._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n\t\t\tthis._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._yAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[XYSeries]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\ttry {\r\n\t\t\tsuper.handleSeriesAdded(event);\r\n\t\t\tlet series: XYSeries = event.newValue;\r\n\t\t\tseries.xAxis; // this is enough to get axis, handled in getter\r\n\t\t\tseries.yAxis; // this is enough to get axis, handled in getter\r\n\r\n\t\t\tif (series.fill == undefined) {\r\n\t\t\t\tseries.fill = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.stroke == undefined) {\r\n\t\t\t\tseries.stroke = series.fill;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart's [[Cursor]].\r\n\t *\r\n\t * @param cursor Cursor\r\n\t */\r\n\tpublic set cursor(cursor: this[\"_cursor\"]) {\r\n\t\tif (this._cursor != cursor) {\r\n\t\t\tif (this._cursor) {\r\n\t\t\t\tthis.removeDispose(this._cursor);\r\n\t\t\t}\r\n\r\n\t\t\tthis._cursor = cursor;\r\n\r\n\t\t\tif (cursor) {\r\n\t\t\t\t// TODO this is wrong, fix it\r\n\t\t\t\tthis._disposers.push(cursor);\r\n\t\t\t\tcursor.chart = this;\r\n\t\t\t\tcursor.parent = this._cursorContainer;\r\n\t\t\t\tcursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n\t\t\t\tcursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n\t\t\t\tcursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n\t\t\t\tcursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n\t\t\t\tcursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Cursor\r\n\t */\r\n\tpublic get cursor(): this[\"_cursor\"] {\r\n\t\treturn this._cursor;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tlet cursor = this.cursor;\r\n\r\n\t\tif (cursor.visible && !cursor.isHiding) {\r\n\t\t\tlet xPosition: number = this.cursor.xPosition;\r\n\t\t\tlet yPosition: number = this.cursor.yPosition;\r\n\r\n\t\t\tthis.showSeriesTooltip({\r\n\t\t\t\tx: xPosition,\r\n\t\t\t\ty: yPosition\r\n\t\t\t});\r\n\r\n\t\t\tlet exceptAxis: Axis;\r\n\t\t\tlet snapToSeries = cursor.snapToSeries;\r\n\t\t\tif (snapToSeries) {\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.xAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.yAxis;\r\n\t\t\t\t}\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.yAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.showAxisTooltip(this.xAxes, xPosition, exceptAxis);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition, exceptAxis);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleHideCursor(): void {\r\n\t\tthis.hideObjectTooltip(this.xAxes);\r\n\t\tthis.hideObjectTooltip(this.yAxes);\r\n\t\tthis.hideObjectTooltip(this.series);\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates values for each series' legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSeriesLegend(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.updateLegendValue();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hides a tooltip for a list of objects.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param sprites A list of sprites to hide tooltip for\r\n\t */\r\n\tpublic hideObjectTooltip(sprites: List): void {\r\n\t\t$iter.each(sprites.iterator(), (sprite) => {\r\n\t\t\tsprite.hideTooltip(0);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows a tooltip for all chart's series, using specific coordinates as a\r\n\t * reference point.\r\n\t *\r\n\t * The tooltip might be shown at different coordinates depending on the\r\n\t * actual data point's position, overlapping with other tooltips, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Reference point\r\n\t */\r\n\tpublic showSeriesTooltip(position?: IPoint): void {\r\n\r\n\t\tif (!position) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.hideTooltip();\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\tlet sum = 0;\r\n\t\tthis.series.each((series) => {\r\n\t\t\t//if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n\r\n\t\t\tif ((series.xAxis instanceof DateAxis && series.xAxis.snapTooltip) || (series.yAxis instanceof DateAxis && series.yAxis.snapTooltip)) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet point = series.showTooltipAtPosition(position.x, position.y);\r\n\t\t\t\tif (point) {\r\n\t\t\t\t\tseries.tooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: this.pixelHeight });\r\n\t\t\t\t\tseriesPoints.push({ series: series, point: point });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//}\r\n\t\t});\r\n\r\n\t\tif (this.arrangeTooltips) {\r\n\t\t\tthis.sortSeriesTooltips(seriesPoints);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic sortSeriesTooltips(seriesPoints: { point: IPoint, series: XYSeries }[]) {\r\n\r\n\t\tlet topLeft = $utils.spritePointToSvg({ x: -0.5, y: -0.5 }, this.plotContainer);\r\n\t\tlet bottomRight = $utils.spritePointToSvg({ x: this.plotContainer.pixelWidth + 0.5, y: this.plotContainer.pixelHeight + 0.5 }, this.plotContainer);\r\n\r\n\t\tlet sum = 0;\r\n\t\tlet filteredSeriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\t$array.each(seriesPoints, (seriesPoint) => {\r\n\t\t\tlet point = seriesPoint.point;\r\n\t\t\tif (point && $math.isInRectangle(point, { x: topLeft.x, y: topLeft.y, width: bottomRight.x - topLeft.x, height: bottomRight.y - topLeft.y })) {\r\n\t\t\t\tfilteredSeriesPoints.push({ point: point, series: seriesPoint.series });\r\n\t\t\t\tsum += point.y;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tseriesPoints = filteredSeriesPoints;\r\n\r\n\t\tseriesPoints.sort((a, b) => {\r\n\t\t\tif (a.point.y > b.point.y) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\telse if (a.point.y < b.point.y) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tlet averageY = sum / seriesPoints.length;\r\n\t\tlet maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n\r\n\t\tif (seriesPoints.length > 0) {\r\n\r\n\t\t\tlet top = topLeft.y;\r\n\t\t\tlet bottom = bottomRight.y;\r\n\r\n\t\t\tlet topPoint = $utils.spritePointToDocument({ x: 0, y: top }, this);\r\n\r\n\t\t\tlet dropped = false;\r\n\r\n\t\t\tif (averageY > top + (bottom - top) / 2) {\r\n\t\t\t\tlet nextHeight = bottom;\r\n\t\t\t\tfor (let i = seriesPoints.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\t\t\t\t\tnextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\r\n\r\n\t\t\t\t\tif (nextHeight < -maxY) {\r\n\t\t\t\t\t\tdropped = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (averageY <= top + (bottom - top) / 2 || dropped) {\r\n\t\t\t\tlet nextY = top;\r\n\t\t\t\tfor (let i = 0, len = seriesPoints.length; i < len; i++) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\r\n\t\t\t\t\tnextY = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY + tooltip.label.measuredHeight - tooltip.pixelY + pointY + tooltip.pixelMarginBottom }, tooltip).y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows tooltips for a list of axes at specific position.\r\n\t *\r\n\t * Position might be X coordinate for horizontal axes, and Y coordinate for\r\n\t * vertical axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axes List of axes to show tooltip on\r\n\t * @param position Position (px)\r\n\t */\r\n\tpublic showAxisTooltip(axes: List, position: number, except?: Axis): void {\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tif (axis != except) {\r\n\t\t\t\tif (this.dataItems.length > 0 || axis.dataItems.length > 0) {\r\n\t\t\t\t\taxis.showTooltipAtPosition(position);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n\t *\r\n\t * @param axis Axis\r\n\t * @param range Range\r\n\t * @return Modified range\r\n\t */\r\n\tpublic getUpdatedRange(axis: Axis, range: IRange): IRange {\r\n\r\n\t\tif (!axis) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet start: number;\r\n\t\tlet end: number;\r\n\t\tlet inversed = axis.renderer.inversed;\r\n\r\n\t\tif (axis.renderer instanceof AxisRendererY) {\r\n\t\t\trange = $math.invertRange(range);\r\n\t\t}\r\n\r\n\t\tif (inversed) {\r\n\t\t\t$math.invertRange(range);\r\n\r\n\t\t\tstart = 1 - axis.end;\r\n\t\t\tend = 1 - axis.start;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstart = axis.start;\r\n\t\t\tend = axis.end;\r\n\t\t}\r\n\r\n\t\tlet difference: number = end - start;\r\n\r\n\t\treturn {\r\n\t\t\tstart: start + range.start * difference,\r\n\t\t\tend: start + range.end * difference\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user finishes zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomEnd(event: IXYCursorEvents[\"zoomended\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tif (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n\t\t\tlet xRange: IRange = cursor.xRange;\r\n\t\t\tif (xRange && this.xAxes.length > 0) {\r\n\t\t\t\txRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n\t\t\t\txRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.xAxes, xRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n\t\t\tlet yRange: IRange = cursor.yRange;\r\n\t\t\tif (yRange && this.yAxes.length > 0) {\r\n\t\t\t\tyRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n\t\t\t\tyRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.yAxes, yRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanStart(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\tif (xAxis) {\r\n\t\t\tthis._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n\t\t}\r\n\r\n\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\tif (yAxis) {\r\n\t\t\tthis._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user ends panning\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanEnd(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\r\n\t\tif (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndXRange;\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndXRange = undefined;\r\n\t\t\tthis._panStartXRange = undefined;\r\n\t\t}\r\n\t\tif (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndYRange;\r\n\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndYRange = undefined;\r\n\t\t\tthis._panStartYRange = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleCursorCanceled(): void {\r\n\t\tthis._panEndXRange = undefined;\r\n\t\tthis._panStartXRange = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanning(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tlet maxPanOut = cursor.maxPanOut;\r\n\t\tif (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartXRange;\r\n\t\t\tlet range = cursor.xRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.xAxes);\r\n\r\n\t\t\tlet difference = (panStartRange.end - panStartRange.start);\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndXRange = newRange;\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tif (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartYRange;\r\n\t\t\tlet range = cursor.yRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndYRange = newRange;\r\n\t\t\tthis.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user starts zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomStart(event: IXYCursorEvents[\"zoomstarted\"]): void {\r\n\r\n\t\t// Nothing here\r\n\t\t// This method is here only as a \"placeholder\" for extending classes to\r\n\t\t// override if necessary\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal (X) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarX(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarX) {\r\n\t\t\tthis.removeDispose(this._scrollbarX);\r\n\t\t}\r\n\t\tthis._scrollbarX = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.topAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toBack();\r\n\t\t\tscrollbar.orientation = \"horizontal\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\t\t\tif (xAxis) {\r\n\t\t\t\t\targ.value = xAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarX(): Scrollbar {\r\n\t\treturn this._scrollbarX;\r\n\t}\r\n\r\n\t/**\r\n\t * Vertical (Y) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarY(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarY) {\r\n\t\t\tthis.removeDispose(this._scrollbarY);\r\n\t\t}\r\n\t\tthis._scrollbarY = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.rightAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toFront();\r\n\t\t\tscrollbar.orientation = \"vertical\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\t\t\tif (yAxis) {\r\n\t\t\t\t\targ.value = yAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarY(): Scrollbar {\r\n\t\treturn this._scrollbarY;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleXScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.xAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleYScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.yAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes that are affected by to specific relative range.\r\n\t *\r\n\t * @param axes List of axes to zoom\r\n\t * @param range Range of values to zoom to (0-1)\r\n\t * @param instantly If set to `true` will skip zooming animation\r\n\t * @return Recalculated range that is common to all involved axes\r\n\t */\r\n\tprotected zoomAxes(axes: List>, range: IRange, instantly?: boolean, round?: boolean, declination?: number): IRange {\r\n\t\tlet realRange: IRange = { start: 0, end: 1 };\r\n\r\n\t\tthis.showSeriesTooltip(); // hides\r\n\r\n\t\tif (!this.dataInvalid) {\r\n\t\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\trange = $math.invertRange(range);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxis.hideTooltip(0);\r\n\r\n\t\t\t\tif (round) {\r\n\t\t\t\t\tlet diff = range.end - range.start;\r\n\t\t\t\t\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\trange.end = range.start + diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet axisRange: IRange = axis.zoom(range, instantly, instantly, declination);\r\n\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\taxisRange = $math.invertRange(axisRange);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealRange = axisRange;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn realRange;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if bullet container is masked.\r\n\t *\r\n\t * If it is set to `true`, any bullets that do not fit into bullet container\r\n\t * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n\t * of the plot area so they are not cut off.\r\n\t *\r\n\t * @param value Mask bullet container?\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mask bullet container?\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if chart should arrange series tooltips so that they would not\r\n\t * overlap.\r\n\t *\r\n\t * If set to `true` (default), the chart will adjust vertical positions of\r\n\t * all simultaneously shown tooltips to avoid overlapping.\r\n\t *\r\n\t * However, if you have a vertically-arranged chart, it might not make sense,\r\n\t * because tooltips would most probably not be aligned horizontally. In this\r\n\t * case it would probably be a good idea to set this setting to `false`.\r\n\t *\r\n\t * @default true\r\n\t * @param value Arrange tooltips?\r\n\t */\r\n\tpublic set arrangeTooltips(value: boolean) {\r\n\t\tthis.setPropertyValue(\"arrangeTooltips\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Arrange tooltips?\r\n\t */\r\n\tpublic get arrangeTooltips(): boolean {\r\n\t\treturn this.getPropertyValue(\"arrangeTooltips\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\t\tlet plotContainer = this.plotContainer;\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n\t\tlet shift = event.shift.y;\r\n\r\n\t\tlet rangeX: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tlet rangeY: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tlet shiftStep = 0.05;\r\n\r\n\t\tlet maxPanOut = 0;\r\n\r\n\t\tlet mouseWheelBehavior = this.mouseWheelBehavior;\r\n\r\n\t\tif (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n\r\n\t\t\tlet differenceX = rangeX.end - rangeX.start;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartX <= 0) {\r\n\t\t\t\tnewEndX = newStartX + differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndX >= 1) {\r\n\t\t\t\tnewStartX = newEndX - differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n\t\t\tshift *= -1;\r\n\t\t\tlet differenceY = rangeY.end - rangeY.start;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartY <= 0) {\r\n\t\t\t\tnewEndY = newStartY + differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndY >= 1) {\r\n\t\t\t\tnewStartY = newEndY - differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationX = plotPoint.x / plotContainer.maxWidth;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * shift / 100 * locationX);\r\n\t\t\tnewStartX = Math.min(newStartX, locationX);\r\n\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n\t\t\tnewEndX = Math.max(newEndX, locationX);\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationY = plotPoint.y / plotContainer.maxHeight;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * shift / 100 * (1 - locationY));\r\n\t\t\tnewStartY = Math.min(newStartY, locationY);\r\n\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY, 1 + maxPanOut);\r\n\t\t\tnewEndY = Math.max(newEndY, locationY);\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies action for when mouse wheel is used when over the chart.\r\n\t *\r\n\t * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n\t *\r\n\t * @default \"none\"\r\n\t * @param mouse wheel behavior\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis.plotContainer.wheelable = false;\r\n\t\t\t\t\tthis.plotContainer.hoverable = false;\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-speicifc data fields so they are parsed properly.\r\n\t *\r\n\t * @param fields Array of date fields\r\n\t * @return Array of date fields populated with chart's date fields\r\n\t */\r\n\tprotected dataSourceDateFields(fields: string[]): string[] {\r\n\t\t// Process parent\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-specific data fields so they are parsed properly.\r\n\t *\r\n\t * @param value Array of number fields\r\n\t * @return Array of number fields populated with chart's number fields\r\n\t */\r\n\tprotected dataSourceNumberFields(fields: string[]): string[] {\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Save axis ranges for later processing\r\n\t\t\tlet xAxes: any[] = [];\r\n\t\t\tlet yAxes: any[] = [];\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.xAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\txAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.xAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.xAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.yAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\tyAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.yAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.yAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"LineSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"XYCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up scrollbars\r\n\t\t\tif ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n\t\t\t\tconfig.scrollbarX.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n\t\t\t\tconfig.scrollbarY.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\r\n\t\t\t// Finish up with ranges.\r\n\t\t\t// We need to do this here because series are processed last in JSON\r\n\t\t\t// config. Therefore their respective objects are not yet are available\r\n\t\t\t// when axis (and respectively their ranges) are being processed.\r\n\t\t\tif (yAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = yAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.yAxes.getIndex(yAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: yAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (xAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = xAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.xAxes.getIndex(xAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: xAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param a Element 1\r\n\t * @param b Element 2\r\n\t * @return Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"scrollbarX\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarX\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"scrollbarY\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarY\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"series\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"series\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new Series of type suitable for this chart.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new XYSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Button]] element that is used for zooming out the chart.\r\n\t *\r\n\t * This button appears only when chart is zoomed in, and disappears\r\n\t * autoamatically when it is zoome dout.\r\n\t *\r\n\t * @param button Zoom out button\r\n\t */\r\n\tpublic set zoomOutButton(button: Button) {\r\n\t\tthis._zoomOutButton = button;\r\n\t\tif (button) {\r\n\t\t\tbutton.events.on(\"hit\", () => {\r\n\t\t\t\tthis.zoomAxes(this.xAxes, { start: 0, end: 1 });\r\n\t\t\t\tthis.zoomAxes(this.yAxes, { start: 0, end: 1 });\r\n\t\t\t}, undefined, false);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Zoom out button\r\n\t */\r\n\tpublic get zoomOutButton(): Button {\r\n\t\treturn this._zoomOutButton;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[XYChart]].\r\n\t *\r\n\t * @param source Source XYChart\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.xAxes.copyFrom(source.xAxes);\r\n\t\tthis.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tthis.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\t\t//@todo copy all container properties\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\r\n\t\tlet scrollbarX = this.scrollbarX;\r\n\t\tif (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarX.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tlet scrollbarY = this.scrollbarY;\r\n\t\tif (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarY.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\r\n\t\tthis.yAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Adds one or several (array) of data items to the existing data.\r\n\t *\r\n\t * @param rawDataItem One or many raw data item objects\r\n\t */\r\n\tpublic addData(rawDataItem: Object | Object[], removeCount?: number): void {\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.setElement(this.paper.add(\"path\"));\r\n\t\tstrokeSprite.isMeasured = false;\r\n\t\tthis._disposers.push(strokeSprite);\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points Points to connect\r\n\t * @param closePoints ?\r\n\t * @param smoothnessX Horizontal bezier setting (?)\r\n\t * @param smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number): void {\r\n\t\tif (!this.disabled) {\r\n\t\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\t\t\t\t// first moveTo helps to avoid Chrome straight line in the mask bug.\r\n\t\t\t\tlet path: string = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n\r\n\t\t\t\tif (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n\t\t\t\t\t// like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.strokeSprite.path = path;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fillSprite.path = \"\";\r\n\t\t\t\tthis.strokeSprite.path = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties from a [[Sprite]] to both line and fill elements.\r\n\t *\r\n\t * @param source Source [[Sprite]] to copy properties from\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tlet lineElement = this.strokeSprite;\r\n\t\t$object.copyProperties(source, lineElement.properties, visualProperties);\r\n\t\tlineElement.fillOpacity = 0;\r\n\r\n\t\tlet fillElement = this.fillSprite;\r\n\t\t$object.copyProperties(source, fillElement.properties, visualProperties);\r\n\t\tfillElement.strokeOpacity = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeriesSegment.ts","/**\r\n * Line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesDataFields, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { LineSeriesSegment, ILineSeriesSegmentProperties } from \"./LineSeriesSegment\";\r\nimport { Axis, AxisDataItem } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { LegendDataItem } from \"../Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class LineSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: LineSeries;\r\n\r\n\t/**\r\n\t * Point of line series data item\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\r\n\t * A reference to a segment object, used for getting proper colors for tooltips\r\n\t */\r\n\tpublic segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesDataItem\";\r\n\t}\r\n\r\n\t// @todo: minimums/maximums\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Vertical tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionY?: number;\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnect?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesAdapters extends IXYSeriesAdapters, ILineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: LineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of line series segments.\r\n\t *\r\n\t * Segments are used in two cases:\r\n\t *\r\n\t * * When we want to change the appearance of a part of the line series;\r\n\t * * When we have an axis range.\r\n\t */\r\n\tpublic segments: ListTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * A container for segment elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic segmentsContainer: Container;\r\n\r\n\t/**\r\n\t * Minimum distance in pixels between two adjacent points.\r\n\t *\r\n\t * If the distance is less than this setting, a point is skipped.\r\n\t *\r\n\t * This allows acceptable performance with huge amounts of data points.\r\n\t *\r\n\t * @default 0.5\r\n\t */\r\n\tpublic minDistance: number = 0.5;\r\n\r\n\t/**\r\n\t * Iterator for segments.\r\n\t */\r\n\tprotected _segmentsIterator: $iter.ListIterator;\r\n\r\n\tprotected _adjustedStartIndex:number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.segments = new ListTemplate(this.createSegment());\r\n\t\tthis.segments.template.applyOnClones = true;\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.segments));\r\n\t\tthis._disposers.push(this.segments.template);\r\n\r\n\t\tthis._segmentsIterator = new $iter.ListIterator(this.segments, () => this.segments.create());\r\n\t\tthis._segmentsIterator.createNewItems = true;\r\n\r\n\t\tthis.className = \"LineSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.fillOpacity = 0;\r\n\r\n\t\tthis.connect = true;\r\n\r\n\t\tthis.tensionX = 1;\r\n\t\tthis.tensionY = 1;\r\n\r\n\t\tthis.segmentsContainer = this.mainContainer.createChild(Container);\r\n\t\tthis.segmentsContainer.isMeasured = false;\r\n\r\n\t\t// line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n\t\t// todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n\t\t// this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Line Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new LineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new LineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\t// this makes data items animate when added\r\n\t\tif (this.appeared && this.visible) {\r\n\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\t\tlet previousDataItem: XYSeriesDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n\r\n\t\t\tdataItem.component = this; // as these values are set before, we don't know component yet\r\n\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialY: number = yAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialY = previousDataItem.values[\"valueY\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this makes line animate from previous point to newly added point\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tif (xAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialX: number = xAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialX = previousDataItem.values[\"valueX\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n\r\n\t\t\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates corresponding legend data item with current values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.openSegment(this._adjustedStartIndex);\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\tthis.openSegment(this._adjustedStartIndex, range);\r\n\t\t});\r\n\r\n\t\t$iter.each(this._segmentsIterator.iterator(), (segment) => {\r\n\t\t\tsegment.__disabled = true;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [sliceData description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected sliceData(): void {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\t// we need extra one item to both sides with values for line series, otherwise the line will not continue out of bounds of the chart while scrolling\r\n\t\t// find first to the left\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.startIndex - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tstartIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._adjustedStartIndex = this.findAdjustedIndex(startIndex, [\"stroke\", \"strokeWidth\", \"strokeDasharray\", \"strokeOpacity\", \"fill\", \"fillOpacity\", \"opacity\"]);\r\n\r\n\t\t// find first to the right\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tendIndex = i + 1;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._workingStartIndex = startIndex;\r\n\t\tthis._workingEndIndex = endIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected findAdjustedIndex(adjustedIndex: number, properties: string[]): number {\r\n\t\tlet propertyFields:any = this.propertyFields;\r\n\t\tlet startIndex = adjustedIndex;\r\n\t\t$array.each(properties, (property) => {\r\n\t\t\tif ($type.hasValue(propertyFields[property])) {\r\n\t\t\t\tfor (let i = startIndex; i >= 0; i--) {\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif ($type.hasValue(dataItem.properties[property])) {\r\n\t\t\t\t\t\tif (adjustedIndex > i) {\r\n\t\t\t\t\t\t\tadjustedIndex = i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn adjustedIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * [openSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param openIndex [description]\r\n\t * @param axisRange [description]\r\n\t */\r\n\tprotected openSegment(openIndex: number, axisRange?: AxisDataItem): void {\r\n\t\tlet points: IPoint[] = [];\r\n\r\n\t\tlet endIndex: number = this._workingEndIndex;\r\n\r\n\t\tlet closeIndex: number;\r\n\t\tlet propertiesChanged: boolean = false;\r\n\r\n\t\tlet segment: LineSeriesSegment = this._segmentsIterator.getFirst();\r\n\t\tsegment.__disabled = false;\r\n\r\n\t\tif (axisRange) {\r\n\t\t\tsegment.parent = axisRange.contents;\r\n\t\t\t$object.copyProperties(axisRange.contents, segment, visualProperties);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$object.copyProperties(this, segment, visualProperties);\r\n\t\t\tsegment.filters.clear();\r\n\t\t\tsegment.parent = this.segmentsContainer;\r\n\t\t}\r\n\r\n\t\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.closeSegment(segment, points, openIndex, closeIndex, axisRange);\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean) {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n\t\tif (!backwards) {\r\n\t\t\tdataItem.point = point;\r\n\t\t}\r\n\t\tpoints.push(point);\r\n\t}\r\n\r\n\t/**\r\n\t * [closeSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param openIndex [description]\r\n\t * @param closeIndex [description]\r\n\t * @param axisRange [description]\r\n\t */\r\n\tprotected closeSegment(segment: LineSeriesSegment, points: IPoint[], openIndex: number, closeIndex: number, axisRange?: AxisDataItem) {\r\n\r\n\t\tlet closePoints: IPoint[] = [];\r\n\r\n\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\tthis.stacked) {\r\n\t\t\tfor (let i: number = closeIndex; i >= openIndex; i--) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n\t\t\t\t\tthis.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet baseAxis: Axis = this.baseAxis;\r\n\t\t\tlet count: number = points.length;\r\n\t\t\tlet xAxis: Axis = this.xAxis;\r\n\t\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\t\tif (baseAxis == xAxis) {\r\n\t\t\t\tclosePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n\t\t\t\tclosePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawSegment(segment, points, closePoints);\r\n\r\n\t\tif (closeIndex < this._workingEndIndex - 1) {\r\n\t\t\tthis.openSegment(closeIndex, axisRange);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment Segment\r\n\t * @param points Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n\t}\r\n\r\n\t/**\r\n\t * Segement will get its colors from `this.dataItem`, as thats how\r\n\t * `getPropertyValue()` method works.\r\n\t *\r\n\t * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n\t * `hasProperties` is set to `true` on data item (this means it can contain\r\n\t * some properties set).\r\n\t *\r\n\t * @param itemProperties Item properties\r\n\t * @param segment Segment\r\n\t * @return Properties changed?\r\n\t */\r\n\tprotected updateSegmentProperties(itemProperties: { [index: string]: any }, segment: LineSeriesSegment, checkOnly?: boolean): boolean {\r\n\t\tlet changed: boolean = false;\r\n\r\n\t\t$object.each(itemProperties, (propertyName, value) => {\r\n\t\t\t// some value must be defined\r\n\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\tlet currentValue = (segment)[propertyName];\r\n\t\t\t\tlet currentValueStr: string;\r\n\t\t\t\t// current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n\t\t\t\t// toString() will return hex if it's color. The only problem is that it will return lowercased hex and if we have uppercase in data, it will think that it changed\r\n\t\t\t\tif (currentValue) {\r\n\t\t\t\t\tif (currentValue.toString) {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tlet valueStr: string;\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tif (value.toString) {\r\n\t\t\t\t\t\tvalueStr = value.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tvalueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (!checkOnly) {\r\n\t\t\t\t\t\t(segment)[propertyName] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * If set to `true` the line will connect two adjacent data points by a\r\n\t * straight line. Even if there are data points with missing values\r\n\t * in-between.\r\n\t *\r\n\t * If you set this to `false`, the line will break when there are missing\r\n\t * values.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n\t * @default true\r\n\t * @param value Connect?\r\n\t */\r\n\tpublic set connect(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"connect\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connect(): boolean {\r\n\t\treturn this.getPropertyValue(\"connect\");\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for horizontal tension, meaning the curve will bend in\r\n\t * such way that it never goes below or above connecting points. To enable\r\n\t * vertical bending as well, use `tensionY`.\r\n\t *\r\n\t * @default 1\r\n\t * @param value Horizontal tension (0-1)\r\n\t */\r\n\tpublic set tensionX(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Horizontal tension (0-1)\r\n\t */\r\n\tpublic get tensionX(): number {\r\n\t\treturn this.getPropertyValue(\"tensionX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for vertical tension, meaning the curve might bend in\r\n\t * such way that it will go below or above connected points.\r\n\t *\r\n\t * Combine this setting with `tensionX` to create beautifully looking\r\n\t * smoothed line series.\r\n\t *\r\n\t * @default 1\r\n\t * @param value Vertical tension (0-1)\r\n\t */\r\n\tpublic set tensionY(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Vertical tension (0-1)\r\n\t */\r\n\tpublic get tensionY(): number {\r\n\t\treturn this.getPropertyValue(\"tensionY\");\r\n\t}\r\n\r\n\r\n\t/*\r\n public positionBullet(bullet: Bullet): void {\r\n\t super.positionBullet(bullet);\r\n\r\n\t let dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t if (dataItem.segment) {\r\n\t\t $object.softCopyProperties(dataItem.segment, bullet, visualProperties);\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.disposeChildren();\r\n\r\n\t\tlet line: Line = marker.createChild(Line);\r\n\t\tline.shouldClone = false;\r\n\t\t//line.copyFrom(this); coppies events which is not good\r\n\t\t$object.copyProperties(this, line, visualProperties);\r\n\r\n\t\tline.x2 = w;\r\n\t\tline.y = h / 2;\r\n\t\tline.visible = true;\r\n\r\n\t\tif (this.fillOpacity > 0) {\r\n\t\t\tlet fill: Rectangle = marker.createChild(Rectangle);\r\n\t\t\t//fill.copyFrom(this); coppies events which is not good\r\n\t\t\t$object.copyProperties(this, fill, visualProperties);\r\n\t\t\tfill.width = w;\r\n\t\t\tfill.height = h;\r\n\t\t\tfill.y = 0;\r\n\t\t\tfill.strokeOpacity = 0;\r\n\t\t\tfill.visible = true;\r\n\r\n\t\t\tline.y = 0;\r\n\t\t}\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.stroke;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\r\n\t\t$iter.eachContinue(this.bullets.iterator(), (bullet) => {\r\n\t\t\tif (bullet.copyToLegendMarker) {\r\n\r\n\t\t\t\t// do not copy bullets with labels\r\n\t\t\t\tlet hasLabels: boolean = false;\r\n\t\t\t\t$iter.each(bullet.children.iterator(), (child) => {\r\n\t\t\t\t\tif (child instanceof Label) {\r\n\t\t\t\t\t\thasLabels = true;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!hasLabels) {\r\n\t\t\t\t\tlet clone: Sprite = bullet.clone();\r\n\t\t\t\t\tclone.parent = marker;\r\n\t\t\t\t\tclone.isMeasured = true;\r\n\t\t\t\t\tclone.tooltipText = undefined;\r\n\t\t\t\t\tclone.x = w / 2;\r\n\t\t\t\t\tif (this.fillOpacity > 0) {\r\n\t\t\t\t\t\tclone.y = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tclone.y = h / 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclone.visible = true;\r\n\r\n\t\t\t\t\t// otherwise will not transit to color after hiding\r\n\t\t\t\t\tif (!$type.hasValue(clone.fill)) {\r\n\t\t\t\t\t\tclone.fill = this.fill;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!$type.hasValue(clone.stroke)) {\r\n\t\t\t\t\t\tclone.stroke = this.stroke;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.segments.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeries\"] = LineSeries;\r\nregistry.registeredClasses[\"LineSeriesDataItem\"] = LineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeries.ts","/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param closePoints [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.mask = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point to check\r\n\t * @return Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\t\tlet angle = $math.getAngle(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"./AxisRendererY\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { PointerOrientation } from \"../../core/elements/Tooltip\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = chart.dataItems.length;\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angle here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param value Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet count = chart.dataItems.length;\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number): void {\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (0-1)\r\n\t * @return Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n\t\treturn this.coordinateToPosition(coordinate);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererRadial\"] = AxisRendererRadial;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","/**\r\n * Radar chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { RadarCursor } from \"../cursors/RadarCursor\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarChartDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarChart]].\r\n */\r\nexport interface IRadarChartDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarChart]].\r\n */\r\nexport interface IRadarChartProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Radius of the Radar face. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Radar face. Percent value is relative to radius.\r\n\t *\r\n\t * @todo review desc\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarChart]].\r\n */\r\nexport interface IRadarChartEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarChartAdapters extends IXYChartAdapters, IRadarChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nexport class RadarChart extends XYChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: RadarSeries | RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererCircular = AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererRadial = AxisRendererRadial;\r\n\r\n\t/**\r\n\t * [_cursor description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tpublic _cursor: RadarCursor;\r\n\r\n\t/**\r\n\t * A container that holds Radar visual elements.\r\n\t */\r\n\tpublic radarContainer: Container;\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\r\n\t/**\r\n\t * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic innerRadiusModifyer: number = 1;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChart\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.innerRadius = 0;\r\n\r\n\t\tlet radarContainer = this.plotContainer.createChild(Container);\r\n\t\tradarContainer.shouldClone = false;\r\n\t\tradarContainer.layout = \"absolute\";\r\n\t\tradarContainer.align = \"center\";\r\n\t\tradarContainer.valign = \"middle\";\r\n\r\n\t\tthis.seriesContainer.parent = radarContainer;\r\n\t\tthis.radarContainer = radarContainer;\r\n\t\tthis.bulletsContainer.parent = radarContainer;\r\n\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Cursor, of type suitable for RadarChart.\r\n\t *\r\n\t * @return Cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new RadarCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet radarCont = this.radarContainer;\r\n\t\tlet plotContainer = this.plotContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet wr = plotContainer.innerWidth / rect.width;\r\n\t\tlet hr = plotContainer.innerHeight / rect.height;\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tlet value = innerRadius.value;\r\n\t\t\tlet mr = Math.min(wr, hr);\r\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n\r\n\t\t\tthis.innerRadiusModifyer = value / innerRadius.value;\r\n\t\t\tinnerRadius = percent(value * 100);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for pie also)\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n\r\n\t\tlet diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n\t\tlet radius = diameter / 2;\r\n\t\tlet startAngle = this.startAngle;\r\n\t\tlet endAngle = this.endAngle;\r\n\r\n\t\tthis._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n\r\n\t\tthis._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\tif(axis.renderer.useChartAngles){\r\n\t\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\t\taxis.renderer.endAngle = endAngle;\r\n\t\t\t}\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\taxis.renderer.endAngle = endAngle;\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tlet cursor = this.cursor;\r\n\t\tif (cursor) {\r\n\t\t\tcursor.width = diameter;\r\n\t\t\tcursor.height = diameter;\r\n\t\t\tcursor.startAngle = startAngle;\r\n\t\t\tcursor.endAngle = endAngle;\r\n\t\t}\r\n\r\n\t\tthis.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.radarContainer.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series, suitable for RadarChart.\r\n\t *\r\n\t * @return New Series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new RadarSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius in pixels\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * If set in Percent, it will be relative to `radius`. (outer radius)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\t//do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\t// do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarChart\"] = RadarChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/RadarChart.ts","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { GaugeChart } from \"../types/GaugeChart\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ClockHand]].\r\n */\r\nexport interface IClockHandProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(100)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's tip.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tendWidth: number;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's base.\r\n\t *\r\n\t * @default 5\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @default \"any\"\r\n\t */\r\n\trotationDirection: \"any\" | \"clockWise\" | \"CounterClockWise\";\r\n}\r\n\r\n/**\r\n * Defines events for [[ClockHand]].\r\n */\r\nexport interface IClockHandEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ClockHand]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IClockHandAdapters extends IContainerAdapters, IClockHandProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * ClockHand class is capable of drawing a simple pointy shape with optionally\r\n * rounderd corners and an icon.\r\n *\r\n * @see {@link IClockHandEvents} for a list of available events\r\n * @see {@link IClockHandAdapters} for a list of available Adapters\r\n * @todo Improve\r\n * @important\r\n */\r\nexport class ClockHand extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IClockHandEvents;\r\n\r\n\t/**\r\n\t * A circle element used as hand's base.\r\n\t */\r\n\tprotected _pin: Circle;\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t */\r\n\tprotected _hand: Trapezoid;\r\n\r\n\t/**\r\n\t * An Axis hand is related to.\r\n\t */\r\n\tprotected _axis: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Hand's current value.\r\n\t */\r\n\tprotected _value: any;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ClockHand\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tthis.stroke = this.fill;\r\n\r\n\t\tlet pin: Circle = new Circle();\r\n\t\tpin.radius = 5;\r\n\t\tthis.pin = pin;\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startWidth = 5;\r\n\t\tthis.endWidth = 1;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\tlet hand: Trapezoid = new Trapezoid();\r\n\t\tthis.hand = hand;\r\n\r\n\t\tthis._disposers.push(this._axis);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Re(validates) the clock hand, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet hand = this.hand;\r\n\t\thand.width = this.pixelWidth;\r\n\t\tlet h: number = Math.max(this.startWidth, this.endWidth);\r\n\t\thand.height = h;\r\n\t\thand.leftSide = percent(this.startWidth / h * 100);\r\n\t\thand.rightSide = percent(this.endWidth / h * 100);\r\n\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\r\n\t\t\tlet x0: number = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n\t\t\tlet x1: number = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n\r\n\t\t\thand.x = x0;\r\n\t\t\thand.y = - h / 2;\r\n\r\n\t\t\thand.width = x1 - x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A circle element used as hand's base. (pin)\r\n\t *\r\n\t * @param pin Pin element\r\n\t */\r\n\tpublic set pin(pin: Circle) {\r\n\t\tif (this._pin) {\r\n\t\t\tthis.removeDispose(this._pin);\r\n\t\t}\r\n\t\tif (pin) {\r\n\t\t\tthis._pin = pin;\r\n\t\t\tpin.parent = this;\r\n\t\t\tthis._disposers.push(pin);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Pin element\r\n\t */\r\n\tpublic get pin(): Circle {\r\n\t\treturn this._pin;\r\n\t}\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n\t * `endWidth` properties.\r\n\t *\r\n\t * Set `endWidth` to 1 (px) to make it pointy.\r\n\t *\r\n\t * @param hand Hand element\r\n\t */\r\n\tpublic set hand(hand: Trapezoid) {\r\n\t\tif (this._hand) {\r\n\t\t\tthis.removeDispose(this._hand);\r\n\t\t}\r\n\t\tif (hand) {\r\n\t\t\tthis._hand = hand;\r\n\t\t\thand.parent = this;\r\n\t\t\tthis._disposers.push(hand);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hand element\r\n\t */\r\n\tpublic get hand(): Trapezoid {\r\n\t\treturn this._hand;\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's inner end. (base)\r\n\t *\r\n\t * @default 5\r\n\t * @param value Width (px)\r\n\t */\r\n\tpublic set startWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"startWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get startWidth(): number {\r\n\t\treturn this.getPropertyValue(\"startWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's outer end. (tip)\r\n\t *\r\n\t * @default 1\r\n\t * @param value Width (px)\r\n\t */\r\n\tpublic set endWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"endWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get endWidth(): number {\r\n\t\treturn this.getPropertyValue(\"endWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Rotation direction\r\n\t *\r\n\t * @default any\r\n\t * @param value\r\n\t */\r\n\tpublic set rotationDirection(value: \"any\" | \"clockWise\" | \"counterClockWise\") {\r\n\t\tthis.setPropertyValue(\"rotationDirection\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return rotationDirection\r\n\t */\r\n\tpublic get rotationDirection(): \"any\" | \"clockWise\" | \"counterClockWise\" {\r\n\t\treturn this.getPropertyValue(\"rotationDirection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves clock hand to particular value.\r\n\t *\r\n\t * If `duration` is set to a number in milliseconds, the hand will move\r\n\t * to the new position gracefully, rather than jumping rigth to it.\r\n\t *\r\n\t * Alternatively, you can also set `value` directly.\r\n\t *\r\n\t * @param value New value\r\n\t * @param duration Animation duration (ms)\r\n\t * @param easing Animation easing function\r\n\t */\r\n\tpublic showValue(value: any, duration?: number, easing?: (value: number) => number): void {\r\n\t\tthis._value = value;\r\n\t\tif (value != undefined) {\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tlet renderer = this.axis.renderer;\r\n\t\t\t\tlet newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n\t\t\t\tlet currentAngle = this.rotation;\r\n\r\n\t\t\t\tif (this.rotationDirection == \"clockWise\") {\r\n\t\t\t\t\tif (newAngle < currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle - 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.rotationDirection == \"counterClockWise\") {\r\n\t\t\t\t\tif (newAngle > currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle + 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A current value clock hand is pointing to.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: any) {\r\n\t\tthis.showValue(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): any {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\t/**\r\n\t * An Axis clock hand is associated with.\r\n\t *\r\n\t * Hand's `value` relates to values on the Axis.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set axis(axis: Axis) {\r\n\t\tif (this.axis != axis) {\r\n\t\t\tthis._axis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\tlet chart: GaugeChart = axis.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tthis.rotation = chart.startAngle;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.parent = axis.renderer;\r\n\t\tthis.zIndex = 5;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get axis(): Axis {\r\n\t\treturn this._axis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers `value` accessor, so that Hand animates to new position, in case\r\n\t * value has changed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateValue() {\r\n\t\tthis.value = this.value;\r\n\t}\r\n\r\n\t/**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Connect clock hands with axes\r\n\t\t\tif ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n\t\t\t\tconfig.axis = this.map.getKey(config.axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ClockHand\"] = ClockHand;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ClockHand.ts","/**\r\n * Module for building Gauge charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, IRadarChartProperties, IRadarChartDataFields, IRadarChartAdapters, IRadarChartEvents, RadarChartDataItem } from \"./RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t */\r\n\tpublic hands: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected processHand(event: IListEvents[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * 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\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\tpublic _dataFields: IPercentChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPercentChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPercentChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\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\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 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;\r\n\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\tpublic _properties!: IPieTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\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\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\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\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\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 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 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\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 */\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 */\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\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 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 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 duration Duration (ms)\r\n\t * @param delay Delay hiding (ms)\r\n\t * @param toValue Target value for animation\r\n\t * @param 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 duration Duration (ms)\r\n\t * @param delay Delay hiding (ms)\r\n\t * @param 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\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 */\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 */\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 */\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 */\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\tpublic _dataFields: IPieSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\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\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\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 */\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 */\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 */\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 */\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 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 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 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 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 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 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 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 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 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 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 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 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 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\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 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 */\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\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\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Relative inner radius (0-1).\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 */\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 */\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\tpublic _dataFields: IPieChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\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\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\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 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}\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;\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 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 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 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 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 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 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 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 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}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n}\r\n\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\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieSeries3D;\r\n\r\n\t/**\r\n\t * @todo Remove?\r\n\t * @deprecated\r\n\t */\r\n\tpublic component: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3DDataItem\";\r\n\r\n\t\tthis.values.depthValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice depth (height).\r\n\t *\r\n\t * @param value Depth\r\n\t */\r\n\tpublic set depthValue(value: number) {\r\n\t\tthis.setValue(\"depthValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth\r\n\t */\r\n\tpublic get depthValue(): number {\r\n\t\treturn this.values[\"depthValue\"].value;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DDataFields extends IPieSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds 3D slice depth (height).\r\n\t */\r\n\tdepthValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DProperties extends IPieSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DEvents extends IPieSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeries3DAdapters extends IPieSeriesAdapters, IPieSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries3D extends PieSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieSeries3DEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PieSeries3DDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: PieChart3D;\r\n\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3D\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeries3DDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice3D();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: PieSeries3DDataItem): void {\r\n\r\n\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\tlet depth: number = this.depth;\r\n\t\tif (!$type.isNumber(depth)) {\r\n\t\t\tdepth = this.chart.depth;\r\n\t\t}\r\n\r\n\t\tlet depthPercent: number = dataItem.values.depthValue.percent;\r\n\t\tif (!$type.isNumber(depthPercent)) {\r\n\t\t\tdepthPercent = 100;\r\n\t\t}\r\n\r\n\t\tslice.depth = depthPercent * depth / 100;\r\n\r\n\t\tlet angle: number = this.angle;\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = this.chart.angle;\r\n\t\t}\r\n\r\n\t\tslice.angle = angle;\r\n\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = this._workingStartIndex; i < this._workingEndIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\t\tvar startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tlet slice = dataItem.slice;\r\n\r\n\t\tbullet.y = bullet.pixelY - slice.depth;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries3D.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChart3DDataItem extends PieChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DDataFields extends IPieChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DProperties extends IPieChartProperties {\r\n\r\n\t/**\r\n\t * Pie's \"depth\" or \"height\" in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Pie's angle at which we are looking at it. (degrees)\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DEvents extends IPieChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChart3DAdapters extends IPieChartAdapters, IPieChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"Pie3DChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"Pie3DSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart3D extends PieChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieChart3DEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3D\";\r\n\r\n\t\tthis.depth = 20;\r\n\t\tthis.angle = 10;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D pie in pixels.\r\n\t *\r\n\t * This will determine \"height\" of the pie.\r\n\t *\r\n\t * @default 20\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tif (this.setPropertyValue(\"depth\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * An angle of a \"point of view\" in degrees. Possible range 0 - 90.\r\n\t *\r\n\t * @default 10\r\n\t * @param value Angle (degrees)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tvalue = $math.fitToRange(value, 0, 90);\r\n\t\tif (this.setPropertyValue(\"angle\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle (degrees)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries3D();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart3D\"] = PieChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart3D.ts","/**\r\n * Sliced chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"../series/FunnelSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SlicedChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: SlicedChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[SlicedChart]]\r\n */\r\nexport interface ISlicedChartProperties extends IPercentChartProperties { }\r\n\r\n/**\r\n * Defines events for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SlicedChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISlicedChartAdapters extends IPercentChartAdapters, ISlicedChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class SlicedChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISlicedChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: FunnelSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChart\";\r\n\r\n\t\tthis.seriesContainer.layout = \"horizontal\";\r\n\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sliced chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SlicedChart.ts","/**\r\n * ChordNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ChordDiagram, ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordNode]].\r\n */\r\nexport interface IChordNodeProperties extends IFlowDiagramNodeProperties { }\r\n\r\n/**\r\n * Defines events for [[ChordNode]].\r\n */\r\nexport interface IChordNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordNodeAdapters extends IFlowDiagramNodeAdapters, IChordNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Chord Diagram.\r\n *\r\n * A Chord node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[ChordLink]] elements.\r\n *\r\n * @see {@link IChordNodeEvents} for a list of available events\r\n * @see {@link IChordNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t */\r\n\tprotected _incomingDataItems: List;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t */\r\n\tprotected _outgoingDataItems: List;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: ChordDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[ChordDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\r\n\t/**\r\n\t * Slice sprite of a node\r\n\t */\r\n\tpublic slice: Slice;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t */\r\n\tpublic label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic nextAngle: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic trueStartAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordNode\";\r\n\r\n\t\tthis.label = this.createChild(AxisLabelCircular);\r\n\t\tthis.label.location = 0.5;\r\n\t\tthis.label.radius = 5;\r\n\t\tthis.label.text = \"{name}\";\r\n\t\tthis.label.zIndex = 1;\r\n\t\tthis.label.shouldClone = false;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\tlet x = slice.radius * $math.cos(labelAngle);\r\n\t\t\tlet y = slice.radius * $math.sin(labelAngle);\r\n\r\n\t\t\tlet point = label.fixPosition(labelAngle, slice.radius);\r\n\r\n\t\t\tthis.nextAngle = startAngle;\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\t\tlink.startAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle;\r\n\t\t\t\t\t\t\tlink.startAngle = this.nextAngle;\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tlink.endAngle = link.startAngle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\r\n\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\r\n\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\tlink.endAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlink.endAngle = this.nextAngle;\r\n\t\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle; // yes, this is needed\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlink.startAngle = link.endAngle;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * updates slice start angle so that when we drag a node it would face the center\r\n\t */\r\n\tprotected updateRotation() {\r\n\t\tlet slice = this.slice;\r\n\t\tlet mAngle = this.trueStartAngle + slice.arc / 2;\r\n\t\tlet radius = slice.radius;\r\n\r\n\t\tlet tx = radius * $math.cos(mAngle);\r\n\t\tlet ty = radius * $math.sin(mAngle);\r\n\r\n\t\tlet angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n\r\n\t\tslice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n\r\n\t\tthis.dx = - this.pixelX;\r\n\t\tthis.dy = - this.pixelY;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[ChordNode]].\r\n\t *\r\n\t * @param source Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t\tthis.slice.copyFrom(source.slice);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordNode\"] = ChordNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordNode.ts","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line, ILineProperties, ILineAdapters, ILineEvents } from \"./Line\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../defs/IPoint\";\r\nimport { IWavedShape } from \"../defs/IWavedShape\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines available properties for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveProperties extends ILineProperties {\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t */\r\n\tcpx?: number;\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t */\r\n\tcpy?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveEvents extends ILineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[QuadraticCurve]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IQuadraticCurveAdapters extends ILineAdapters, IQuadraticCurveProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nexport class QuadraticCurve extends Line {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IQuadraticCurveEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"QuadraticCurve\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis.pixelPerfect = false;\r\n\r\n\t\tthis.fill = color();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the waved line.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\t//super.draw();\r\n\t\tif($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy )){\r\n\r\n\t\t\tlet p1: IPoint = { x: this.x1, y: this.y1 };\r\n\t\t\tlet p2: IPoint = { x: this.x2, y: this.y2 };\r\n\t\t\tlet cp: IPoint = { x: this.cpx, y: this.cpy };\r\n\r\n\t\t\tlet d: string = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n\r\n\t\t\tthis.path = d;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @param value X\r\n\t */\r\n\tpublic set cpx(value: number) {\r\n\t\tthis.setPropertyValue(\"cpx\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get cpx(): number {\r\n\t\treturn this.getPropertyValue(\"cpx\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @param value Y\r\n\t */\r\n\tpublic set cpy(value: number) {\r\n\t\tthis.setPropertyValue(\"cpy\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get cpy(): number {\r\n\t\treturn this.getPropertyValue(\"cpy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position along the line (0-1) into pixel coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tlet p1 = {x:this.x1, y:this.y1};\r\n\t\tlet cp = {x:this.cpx, y:this.cpy};\r\n\t\tlet p2 = {x:this.x2, y:this.y2};\r\n\r\n\t\tlet point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n\t\tlet point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n\r\n\t\treturn {x:point1.x, y:point1.y, angle:$math.getAngle(point1, point2)};\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/core/elements/QuadraticCurve.ts","/**\r\n * ChordLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordLink]].\r\n */\r\nexport interface IChordLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tradius?: number;\r\n\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tarc?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordLink]].\r\n */\r\nexport interface IChordLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordLinkAdapters extends IFlowDiagramLinkAdapters, IChordLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Chord Diagram.\r\n *\r\n * @see {@link IChordLinkEvents} for a list of available events\r\n * @see {@link IChordLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n */\r\n\tpublic middleLine: QuadraticCurve;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordLink\";\r\n\r\n\t\tthis.middleLine = this.createChild(QuadraticCurve);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\r\n\t\t\tlet arc = this.arc;\r\n\t\t\tlet radius = this.radius;\r\n\r\n\t\t\tlet fromNode = this.dataItem.fromNode;\r\n\t\t\tlet toNode = this.dataItem.toNode;\r\n\r\n\t\t\tlet fromX = 0;\r\n\t\t\tlet fromY = 0;\r\n\r\n\t\t\tif (fromNode) {\r\n\t\t\t\tfromX = fromNode.pixelX + fromNode.dx;\r\n\t\t\t\tfromY = fromNode.pixelY + fromNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tlet toX = 0;\r\n\t\t\tlet toY = 0;\r\n\r\n\t\t\tif (toNode) {\r\n\t\t\t\ttoX = toNode.pixelX + toNode.dx;\r\n\t\t\t\ttoY = toNode.pixelY + toNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tif (radius > 0) {\r\n\t\t\t\tlet x1 = radius * $math.cos(startAngle) + fromX;\r\n\t\t\t\tlet y1 = radius * $math.sin(startAngle) + fromY;\r\n\t\t\t\tlet x2 = radius * $math.cos(endAngle) + toX;\r\n\t\t\t\tlet y2 = radius * $math.sin(endAngle) + toY;\r\n\t\t\t\tlet x3 = radius * $math.cos(endAngle + arc) + toX;\r\n\t\t\t\tlet y3 = radius * $math.sin(endAngle + arc) + toY;\r\n\t\t\t\tlet x4 = radius * $math.cos(startAngle + arc) + fromX;\r\n\t\t\t\tlet y4 = radius * $math.sin(startAngle + arc) + fromY;\r\n\r\n\t\t\t\t//let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n\t\t\t\t//let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n\r\n\t\t\t\t//let cpx = (arcWidth) * $math.cos(cpAngle);\r\n\t\t\t\t//let cpy = (arcWidth) * $math.sin(cpAngle);\r\n\r\n\t\t\t\tlet cp = { x: 0, y: 0 };\r\n\t\t\t\tlet path = $path.moveTo({ x: x1, y: y1 });\r\n\r\n\t\t\t\tpath += $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n\t\t\t\tpath += $path.arcTo(endAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n\r\n\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\tthis.link.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.link.path = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.maskBullets) {\r\n\t\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet mAngle1 = startAngle + arc / 2;\r\n\t\t\t\tlet mAngle2 = endAngle + arc / 2;\r\n\t\t\t\tlet mAngleM = mAngle1 + (mAngle2 - mAngle1) / 2;\r\n\r\n\t\t\t\tlet middleLine = this.middleLine;\r\n\r\n\t\t\t\tmiddleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n\t\t\t\tmiddleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n\t\t\t\tmiddleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n\t\t\t\tmiddleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n\r\n\t\t\t\tmiddleLine.cpx = 0;\r\n\t\t\t\tmiddleLine.cpy = 0;\r\n\r\n\t\t\t\tmiddleLine.stroke = this.fill;\r\n\r\n\t\t\t\tthis.positionBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End Y\r\n\t */\r\n\tpublic set radius(value: number) {\r\n\t\tthis.setPropertyValue(\"radius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End Y\r\n\t */\r\n\tpublic get radius(): number {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set arc(value: number) {\r\n\t\tthis.setPropertyValue(\"arc\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [description]\r\n\t */\r\n\tpublic get arc(): number {\r\n\t\treturn this.getPropertyValue(\"arc\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordLink\"] = ChordLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordLink.ts","/**\r\n * Chord diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, IChartProperties, IChartDataFields, IChartAdapters, IChartEvents, ChartDataItem } from \"../Chart\";\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ChordDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ChordDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: ChordNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ChordDiagram]]\r\n */\r\nexport interface IChordDiagramProperties extends IFlowDiagramProperties {\r\n\t/**\r\n\t * Radius of the Chord. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes. Absolute or relative. Negative value means that the inner radius will be calculated from the radius, not from the center.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * If you set this to true, all the lines will be of the same width.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tnonRibbon?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordDiagramAdapters extends IFlowDiagramAdapters, IChordDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nexport class ChordDiagram extends FlowDiagram {\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordDiagramEvents;\r\n\r\n\t/**\r\n\t * A list of chart's Chord nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tpublic nodes: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, ChordNode]>;\r\n\r\n\t/**\r\n\t * [valueAngle description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic valueAngle: number = 0;\r\n\r\n\t/**\r\n\t * A container for chord elemens.\r\n\t */\r\n\tpublic chordContainer:Container;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:ChordNode;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagram\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\r\n\t\tthis.innerRadius = - 15;\r\n\r\n\t\tthis.nodePadding = 5;\r\n\r\n\t\tlet chordContainer = this.chartContainer.createChild(Container);\r\n\t\tchordContainer.align = \"center\";\r\n\t\tchordContainer.valign = \"middle\";\r\n\t\tchordContainer.shouldClone = false;\r\n\t\tchordContainer.layout = \"absolute\";\r\n\t\tthis.chordContainer = chordContainer;\r\n\r\n\t\tthis.nodesContainer.parent = chordContainer;\r\n\t\tthis.linksContainer.parent = chordContainer;\r\n\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.invalidate, this, false);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tlet nodesContainer = this.nodesContainer;\r\n\r\n\t\tlet endAngle = this.endAngle;\r\n\t\tlet startAngle = this.startAngle + this.nodePadding / 2;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\t\tlet pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\t\tlet count = 0;\r\n\r\n\t\tlet newTotal = 0;\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t\tcount++;\r\n\t\t\tlet value = node.total;\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\t\t\tnewTotal += value;\r\n\t\t});\r\n\r\n\t\tthis.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet slice = node.slice;\r\n\r\n\t\t\tslice.radius = radius;\r\n\t\t\tslice.innerRadius = pixelInnerRadius;\r\n\r\n\t\t\tlet value = node.total;\r\n\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tnode.adjustedTotal = value;\r\n\r\n\t\t\tlet arc: number;\r\n\t\t\tif (this.nonRibbon) {\r\n\t\t\t\tarc = (endAngle - this.startAngle) / count - this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarc = this.valueAngle * value;\r\n\t\t\t}\r\n\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.startAngle = startAngle;\r\n\t\t\tnode.trueStartAngle = startAngle;\r\n\t\t\tnode.parent = this.nodesContainer;\r\n\t\t\tnode.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n\t\t\tstartAngle += arc + this.nodePadding;\r\n\t\t})\r\n\r\n\t\tthis.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.chordContainer.invalidateLayout();\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Chord diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ChordDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set nonRibbon(value: boolean) {\r\n\t\tthis.setPropertyValue(\"nonRibbon\", value, true);\r\n\t\tthis.links.template.middleLine.strokeOpacity = 1;\r\n\t\tthis.links.template.link.fillOpacity = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Non-ribbon\r\n\t */\r\n\tpublic get nonRibbon(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonRibbon\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode():this[\"_node\"]{\r\n\t\tlet node = new ChordNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink():this[\"_link\"]{\r\n\t\tlet link = new ChordLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordDiagram\"] = ChordDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/ChordDiagram.ts","/**\r\n * Column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, IXYSeriesDataFields, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { SpriteState } from \"../../core/SpriteState\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { Axis, AxisItemLocation } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { IDataItemEvents } from \"../../core/DataItem\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ColumnSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * A Column Element\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\t/**\r\n\t * Indicates if this data items close value is lower than its open value.\r\n\t */\r\n\tpublic droppedFromOpen: boolean;\r\n\r\n\t/**\r\n\t * Indicates if this items value is lower than previous data item's value.\r\n\t */\r\n\tpublic droppedFromPrevious: boolean;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t */\r\n\tpublic _component!: ColumnSeries;\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _rangesColumns: Dictionary;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\r\n\t\tthis.locations[\"dateX\"] = 0.5;\r\n\t\tthis.locations[\"dateY\"] = 0.5;\r\n\r\n\t\tthis.locations[\"categoryX\"] = 0.5;\r\n\t\tthis.locations[\"categoryY\"] = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A column used to draw a column for this data item.\r\n\t *\r\n\t * @param column\r\n\t */\r\n\tpublic set column(column: this[\"_column\"]) {\r\n\t\tthis.setColumn(column);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Column\r\n\t */\r\n\tpublic get column(): this[\"_column\"] {\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tprotected setColumn(column: this[\"_column\"]) {\r\n\t\tif (this._column && column != this._column) {\r\n\t\t\t$array.remove(this.sprites, this._column);\r\n\t\t}\r\n\t\tthis._column = column;\r\n\r\n\t\tif (column) {\r\n\t\t\tlet prevDataItem: ColumnSeriesDataItem = column.dataItem;\r\n\t\t\tif (prevDataItem && prevDataItem != this) {\r\n\t\t\t\tprevDataItem.column = undefined;\r\n\t\t\t}\r\n\t\t\tthis.addSprite(column);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\t// TODO investigate why component is undefined\r\n\t\t\t\t// https://codepen.io/team/amcharts/pen/dac4be245d658233a6d7e5597df2208b?editors=0010\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.columns.removeValue(column);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t */\r\n\tpublic get rangesColumns(): Dictionary {\r\n\t\tif (!this._rangesColumns) {\r\n\t\t\tthis._rangesColumns = new Dictionary();\r\n\t\t}\r\n\t\treturn this._rangesColumns;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tclustered?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeriesAdapters extends IXYSeriesAdapters, IColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a column graph.\r\n *\r\n * @see {@link IColumnSeriesEvents} for a list of available Events\r\n * @see {@link IColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries extends XYSeries {\r\n\t/**\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: ColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of column elements.\r\n\t */\r\n\tprotected _columns: ListTemplate;\r\n\r\n\t/**\r\n\t * Container to put column elements in.\r\n\t */\r\n\tprotected _columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Start location within cell for columns.\r\n\t */\r\n\tprotected _startLocation: number = 0;\r\n\r\n\t/**\r\n\t * End location within cell for columns.\r\n\t */\r\n\tprotected _endLocation: number = 1;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t */\r\n\tprotected _dropFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t */\r\n\tprotected _dropFromPreviousState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t */\r\n\tprotected _riseFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t */\r\n\tprotected _riseFromPreviousState: SpriteState;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\t\tthis.fillOpacity = 1;\r\n\r\n\t\tthis.clustered = true;\r\n\r\n\t\tlet columnsContainer = this.mainContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis._columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columns;\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = 0; i < this.startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tfor (let i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.yAxis.axisLength;\r\n\r\n\t\t\tif ((t < 0 && b < 0) || (t > axisLenght && b > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\r\n\t\t\tif (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// horizontal bars\r\n\t\telse {\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet rightLocation = dataItem.locations[xField];\r\n\t\t\tlet leftLocation = dataItem.locations[xOpenField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.xAxis instanceof ValueAxis) {\r\n\t\t\t\trightLocation = 0;\r\n\t\t\t\tleftLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, rightLocation);\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.xAxis.axisLength;\r\n\r\n\t\t\tif ((r < 0 && l < 0) || (r > axisLenght && l > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\r\n\t\t\tif (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet w: number = Math.abs(r - l);\r\n\t\tlet h: number = Math.abs(b - t);\r\n\r\n\t\tlet x: number = Math.min(l, r);\r\n\t\tlet y: number = Math.min(t, b);\r\n\r\n\t\tif (!outOfBounds) {\r\n\t\t\tlet column: this[\"_column\"];\r\n\t\t\tif (!dataItem.column) {\r\n\t\t\t\tcolumn = this.columns.create();\r\n\t\t\t\t//$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n\t\t\t\t$object.copyProperties(this, column, visualProperties); // need this because 3d columns are not in the same container\r\n\t\t\t\t$object.copyProperties(this.columns.template, column, visualProperties); // second time, no force, so that columns.template would override series properties\r\n\t\t\t\tdataItem.addSprite(column);\r\n\r\n\t\t\t\tdataItem.column = column;\r\n\r\n\t\t\t\t// accessibility\r\n\t\t\t\tif (this.itemsFocusable()) {\r\n\t\t\t\t\tcolumn.role = \"menuitem\";\r\n\t\t\t\t\tcolumn.focusable = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcolumn.role = \"listitem\";\r\n\t\t\t\t\tcolumn.focusable = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (column.focusable) {\r\n\t\t\t\t\tcolumn.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t\tif (column.hoverable) {\r\n\t\t\t\t\tcolumn.events.once(\"over\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"out\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn = dataItem.column;\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.width = w;\r\n\t\t\tcolumn.height = h;\r\n\r\n\t\t\tcolumn.x = x;\r\n\t\t\tcolumn.y = y;\r\n\r\n\t\t\tcolumn.realX = l;\r\n\t\t\tcolumn.realY = t;\r\n\r\n\t\t\tcolumn.realWidth = r - l;\r\n\t\t\tcolumn.realHeight = b - t;\r\n\r\n\t\t\tcolumn.parent = this.columnsContainer;\r\n\t\t\tcolumn.virtualParent = this;\r\n\r\n\t\t\tthis.setColumnStates(column);\r\n\r\n\t\t\tif (column.invalid) {\r\n\t\t\t\tcolumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.__disabled = false;\r\n\t\t\t//column.returnAfterTemp();\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: this[\"_column\"] = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t//$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\r\n\t\t\t\trangeColumn.width = w;\r\n\t\t\t\trangeColumn.height = h;\r\n\t\t\t\trangeColumn.x = x;\r\n\t\t\t\trangeColumn.y = y;\r\n\r\n\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\r\n\t\t\t\tif (rangeColumn.invalid) {\r\n\t\t\t\t\trangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\t//rangeColumn.returnAfterTemp();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tdataItem.itemWidth = w;\r\n\t\tdataItem.itemHeight = h;\r\n\t}\r\n\r\n\r\n\tdisableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\tdataItem.column.width = 0;\r\n\t\t\t\tdataItem.column.height = 0;\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t * @param value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.fill;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.columns.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { TreeMap, TreeMapDataItem } from \"../types/TreeMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../../core/Container\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Data for the this particular item.\r\n\t *\r\n\t * @param value Item's data\r\n\t */\r\n\t//public set dataContext(value: Object) {\r\n\t//\tthis._dataContext = value;\r\n\t//}\r\n\r\n\r\n\r\n\t/**\r\n\t * @return Item's data\r\n\t */\r\n\t/*\r\n public get dataContext(): Object {\r\n\t // It's because data of tree series is TreeMapDataItems.\r\n\t if (this._dataContext) {\r\n\t\t return (this._dataContext).dataContext;\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * The name of the item's parent item.\r\n\t *\r\n\t * @return Parent name\r\n\t */\r\n\tpublic get parentName(): string {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem && treeMapDataItem.parent) {\r\n\t\t\treturn treeMapDataItem.parent.name;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value.\r\n\t *\r\n\t * @readonly\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\treturn this.treeMapDataItem.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn this._dataContext;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\tlet animation = super.showReal(interpolationDuration);\r\n\t\tlet chart = this.chart;\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of fade out (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet animation = super.hideReal(interpolationDuration);\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t})\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate(){\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/TreeMapSeries.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Related series.\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a duration (ms) the Data Item should take to animate from one\r\n\t * value to another.\r\n\t *\r\n\t * If the duration is not specified via parameter, this method will try to\r\n\t * request a default duration from the related `Component`.\r\n\t *\r\n\t * @param duration Default duration (ms)\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic getDuration():number{\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * series of 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\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum levels the chart will allow drilling down to.\r\n\t *\r\n\t * @default 2\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied autoamtically to each new chart item, if\r\n\t * not explicitly set.\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = (maxX * this.pixelHeight / this.pixelWidth) || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateDataItemIndexes(0);\r\n\r\n\t\t\tthis.layoutAlgorithm(parent);\r\n\r\n\t\t\tfor (let i = 0, len = children.length; i < len; i++) {\r\n\r\n\t\t\t\tlet node = children.getIndex(i);\r\n\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\tthis.layoutItems(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates and returns a new treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum drill-down levels the chart will allow going to.\r\n\t *\r\n\t * If set, the chart will not drill-down further, even if there are sub-items\r\n\t * available.\r\n\t *\r\n\t * Set to `1` to disable drill down functionality.\r\n\t *\r\n\t * @param value Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param value Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param value Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t * this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t * notice,this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t * contributors may be used to endorse or promote products derived from\r\n\t * this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0, node.y0 = y0;\r\n\t\t\t\tnode.x1 = x1, node.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) k = mid + 1;\r\n\t\t\t\telse hi = mid;\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)--k;\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.x0 = x0, node.x1 = x1;\r\n\t\t\tnode.y0 = y0, node.y1 = y0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.y0 = y0, node.y1 = y1;\r\n\t\t\tnode.x0 = x0, node.x1 = x0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tparent.level & 1 ? this.slice(parent) : this.dice(parent);\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0, dy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo sumValue = nodes.getIndex(i1++).value; while (!sumValue && i1 < n);\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? y0 += dy * sumValue / value : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? x0 += dx * sumValue / value : x1, y1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue, i0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DProperties extends IAxisRendererXProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DEvents extends IAxisRendererXEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererX3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererX3DAdapters extends IAxisRendererXAdapters, IAxisRendererX3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for horizontal 3D axis.\r\n *\r\n * @see {@link IAxisRendererX3DEvents} for a list of available events\r\n * @see {@link IAxisRendererX3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererX3D extends AxisRendererX {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererX3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererX3D\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D;\r\n\t\tlet dy = this.chart.dy3D;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DProperties extends IAxisRendererYProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererY3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererY3DAdapters extends IAxisRendererYAdapters, IAxisRendererY3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for vertical 3D axis.\r\n *\r\n * @see {@link IAxisRendererY3DEvents} for a list of available events\r\n * @see {@link IAxisRendererY3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererY3D extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererY3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererY3D\";\r\n\t\tthis._disposers.push(this._chart);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w + this.chart.dx3D, y: this.chart.dy3D });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nexport class ColumnSeries3DDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DProperties extends IColumnSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeries3DAdapters extends IColumnSeriesAdapters, IColumnSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries3D extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tif (this.chart && this.chart.columnsContainer) {\r\n\t\t\treturn this.chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif(dataItem.column){\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif(this.chart){\r\n\t\t\tthis.chart.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the layout (padding and scrollbar positions) to accommodate for\r\n\t * 3D depth and angle.\r\n\t */\r\n\tprotected fixLayout(): void {\r\n\r\n\t\tthis.chartContainer.marginTop = -this.dy3D;\r\n\t\tthis.chartContainer.paddingRight = this.dx3D;\r\n\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.scrollbarX.dy = this.dy3D;\r\n\t\t\tthis.scrollbarX.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.scrollbarY.dy = this.dy3D;\r\n\t\t\tthis.scrollbarY.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tthis.fixColumns();\r\n\r\n\t\tsuper.fixLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count );\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\r\n\t\t\t\tlet i: number = 1;\r\n\t\t\t\tseries.columns.each((column) => {\r\n\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Candlestick]].\r\n */\r\nexport interface ICandlestickProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Candlestick]].\r\n */\r\nexport interface ICandlestickEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Candlestick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickAdapters extends IColumnAdapters, ICandlestickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Candlesticks.\r\n *\r\n * @see {@link ICandlestickEvents} for a list of available events\r\n * @see {@link ICandlestickAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Candlestick extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t */\r\n\tpublic highLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Candlestick\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tsuper.createAssets();\r\n\r\n\t\tthis.lowLine = this.createChild(Line);\r\n\t\tthis.lowLine.shouldClone = false;\r\n\r\n\t\tthis.highLine = this.createChild(Line);\r\n\t\tthis.highLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Candlestick]].\r\n\t *\r\n\t * @param source Source Candlestick\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.lowLine) {\r\n\t\t\tthis.lowLine.copyFrom(source.lowLine);\r\n\t\t}\r\n\t\tif (this.highLine) {\r\n\t\t\tthis.highLine.copyFrom(source.highLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Candlestick\"] = Candlestick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Candlestick.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t */\r\n\thighDateY?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]) {\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet yAxisFieldName: string = $utils.capitalize(this.yAxis.axisFieldName);\r\n\t\t\tthis._yLowField = <$type.Keyof>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\tthis._yHighField = <$type.Keyof>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t}\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet xAxisFieldName: string = $utils.capitalize(this.xAxis.axisFieldName);\r\n\t\t\tthis._xLowField = <$type.Keyof>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\tthis._xHighField = <$type.Keyof>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t}\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xLowField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xHighField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yLowField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yHighField);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[OHLC]].\r\n */\r\nexport interface IOHLCProperties extends ICandlestickProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLC]].\r\n */\r\nexport interface IOHLCEvents extends ICandlestickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLC]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCAdapters extends ICandlestickAdapters, IOHLCProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates OHLCs.\r\n *\r\n * @see {@link IOHLCEvents} for a list of available events\r\n * @see {@link IOHLCAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class OHLC extends Candlestick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t */\r\n\tpublic highLowLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLC\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\t//super.createAssets();\r\n\r\n\t\tthis.openLine = this.createChild(Line);\r\n\t\tthis.openLine.shouldClone = false;\r\n\r\n\t\tthis.highLowLine = this.createChild(Line);\r\n\t\tthis.highLowLine.shouldClone = false;\r\n\r\n\t\tthis.closeLine = this.createChild(Line);\r\n\t\tthis.closeLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[OHLC]].\r\n\t *\r\n\t * @param source Source OHLC\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.openLine) {\r\n\t\t\tthis.openLine.copyFrom(source.openLine);\r\n\t\t}\r\n\t\tif (this.highLowLine) {\r\n\t\t\tthis.highLowLine.copyFrom(source.highLowLine);\r\n\t\t}\r\n\t\tif (this.closeLine) {\r\n\t\t\tthis.closeLine.copyFrom(source.closeLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLC\"] = OHLC;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/OHLC.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesAdapters, ICandlestickSeriesEvents } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class OHLCSeriesDataItem extends CandlestickSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the OHLC elements.\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: OHLCSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"OHLCSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesDataFields extends ICandlestickSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesProperties extends ICandlestickSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesEvents extends ICandlestickSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLCSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCSeriesAdapters extends ICandlestickSeriesAdapters, IOHLCSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class OHLCSeries extends CandlestickSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: OHLCSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\topenLine.y1 = yOpen - pixelY;\r\n\t\t\t\topenLine.y2 = yOpen - pixelY;\r\n\t\t\t\topenLine.x1 = 0;\r\n\t\t\t\topenLine.x2 = x;\r\n\r\n\t\t\t\tcloseLine.y1 = yClose - pixelY;\r\n\t\t\t\tcloseLine.y2 = yClose - pixelY;\r\n\t\t\t\tcloseLine.x1 = x;\r\n\t\t\t\tcloseLine.x2 = 2 * x;\r\n\r\n\t\t\t\thighLowLine.y1 = yHigh - pixelY;\r\n\t\t\t\thighLowLine.y2 = yLow - pixelY;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\thighLowLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\topenLine.x1 = xOpen - pixelX;\r\n\t\t\t\topenLine.x2 = xOpen - pixelX;\r\n\t\t\t\topenLine.y1 = y;\r\n\t\t\t\topenLine.y2 = 2 * y;\r\n\r\n\t\t\t\tcloseLine.x1 = xClose - pixelX;\r\n\t\t\t\tcloseLine.x2 = xClose - pixelX;\r\n\t\t\t\tcloseLine.y1 = 0;\r\n\t\t\t\tcloseLine.y2 = y;\r\n\r\n\t\t\t\thighLowLine.x1 = xHigh - pixelX;\r\n\t\t\t\thighLowLine.x2 = xLow - pixelX;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeOpenLine = rangeColumn.openLine;\r\n\t\t\t\t\trangeOpenLine.x = openLine.x;\r\n\t\t\t\t\trangeOpenLine.y = openLine.y;\r\n\t\t\t\t\trangeOpenLine.x1 = openLine.x1;\r\n\t\t\t\t\trangeOpenLine.x2 = openLine.x2;\r\n\t\t\t\t\trangeOpenLine.y1 = openLine.y1;\r\n\t\t\t\t\trangeOpenLine.y2 = openLine.y2;\r\n\r\n\t\t\t\t\tlet rangeCloseLine = rangeColumn.closeLine;\r\n\t\t\t\t\trangeCloseLine.x = closeLine.x;\r\n\t\t\t\t\trangeCloseLine.y = closeLine.y;\r\n\t\t\t\t\trangeCloseLine.x1 = closeLine.x1;\r\n\t\t\t\t\trangeCloseLine.x2 = closeLine.x2;\r\n\t\t\t\t\trangeCloseLine.y1 = closeLine.y1;\r\n\t\t\t\t\trangeCloseLine.y2 = closeLine.y2;\r\n\r\n\t\t\t\t\tlet rangeHighLowLine = rangeColumn.highLowLine;\r\n\t\t\t\t\trangeHighLowLine.x = highLowLine.x;\r\n\t\t\t\t\trangeHighLowLine.y = highLowLine.y;\r\n\t\t\t\t\trangeHighLowLine.x1 = highLowLine.x1;\r\n\t\t\t\t\trangeHighLowLine.x2 = highLowLine.x2;\r\n\t\t\t\t\trangeHighLowLine.y1 = highLowLine.y1;\r\n\t\t\t\t\trangeHighLowLine.y2 = highLowLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: OHLC = marker.createChild(OHLC);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet openLine: Line = column.openLine;\r\n\t\tlet closeLine: Line = column.closeLine;\r\n\t\tlet highLowLine: Line = column.highLowLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLowLine.y = h / 2;\r\n\t\t\thighLowLine.x2 = w;\r\n\r\n\t\t\topenLine.x = w / 3 * 2;\r\n\t\t\topenLine.y2 = h / 2;\r\n\r\n\t\t\tcloseLine.x = w / 3;\r\n\t\t\tcloseLine.y2 = h;\r\n\t\t\tcloseLine.y1 = h / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\r\n\t\t\thighLowLine.x = w / 2;\r\n\t\t\thighLowLine.y2 = h;\r\n\r\n\t\t\topenLine.y = h / 3 * 2;\r\n\t\t\topenLine.x2 = w / 2;\r\n\r\n\t\t\tcloseLine.y = h / 3;\r\n\t\t\tcloseLine.x2 = w;\r\n\t\t\tcloseLine.x1 = w / 2;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.stroke;\r\n\t\tlegendDataItem.colorOrig = column.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new OHLC();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/OHLCSeries.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ILineSeriesSegmentAdapters, ILineSeriesSegmentEvents, ILineSeriesSegmentProperties, LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentProperties extends ILineSeriesSegmentProperties { }\r\n\r\n/**\r\n * Defines events for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentEvents extends ILineSeriesSegmentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesSegmentAdapters extends ILineSeriesSegmentAdapters, IStepLineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class StepLineSeriesSegment extends LineSeriesSegment {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesSegment\";\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points Points to connect\r\n\t * @param closePoints ?\r\n\t * @param smoothnessX Horizontal bezier setting (?)\r\n\t * @param smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number, noRisers?: boolean, vertical?: boolean): void {\r\n\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\r\n\t\t\tif (noRisers) {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]);\r\n\t\t\t\tif (points.length > 0) {\r\n\t\t\t\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\t\t\t\tlet point = points[i];\r\n\t\t\t\t\t\tif (i / 2 == Math.round(i / 2)) {\r\n\t\t\t\t\t\t\tpath += $path.moveTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tpath += $path.lineTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath = $path.moveTo(points[0]) + $path.polyline(points);\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]) + $path.polyline(points);\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","/**\r\n * Step line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class StepLineSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: StepLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesProperties extends ILineSeriesProperties {\r\n\tnoRisers?: boolean;\r\n\r\n\tstartLocation?: number;\r\n\r\n\tendLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesAdapters extends ILineSeriesAdapters, IStepLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class StepLineSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: StepLineSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: StepLineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeries\";\r\n\t\tthis.applyTheme();\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new StepLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocation);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocation);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocation);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty0 = $math.fitToRange(y0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\tx1 = $math.fitToRange(x1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty1 = $math.fitToRange(y1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers && this.connect) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment Segment\r\n\t * @param points Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param value No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnAdapters extends IColumnAdapters, IRadarColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates RadarColumns.\r\n *\r\n * @see {@link IRadarColumnEvents} for a list of available events\r\n * @see {@link IRadarColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class RadarColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t */\r\n\tpublic radarColumn: Slice;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.radarColumn = this.createChild(Slice);\r\n\t\tthis.radarColumn.shouldClone = false;\r\n\t\tthis.radarColumn.strokeOpacity = undefined;\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.radarColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[RadarColumn]].\r\n\t *\r\n\t * @param source Source RadarColumn\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.radarColumn) {\r\n\t\t\tthis.radarColumn.copyFrom(source.radarColumn);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return X\r\n\t */\r\n\tprotected getTooltipX(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipX;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return Y\r\n\t */\r\n\tprotected getTooltipY(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipY;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumn\"] = RadarColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/RadarColumn.ts","/**\r\n * Radar column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\r\n\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\tpercentWidth = 100;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.sum;\r\n\r\n\t\tif(sum == 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\tlet nextValue = this.getNextValue(dataItem);\r\n\t\tlet workingValue = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet sum = this.dataItem.values.value.sum;\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / dataItem.value;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / dataItem.value;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\tpicture?: Sprite;\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif(scale == Infinity){\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight;\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth;\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tthis.slicesContainer.mask = this._maskSprite;\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * \"type\": \"PictorialStackedSeries\",\r\n\t * // ...\r\n\t * \"maskSprite\": {\r\n\t * \"path\": iconPath\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\tlet ww = this.width;\r\n\t\tlet pw = 0.8;\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t *\r\n\t * @param source Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","/**\r\n * CurvedColumnSeries module.\r\n *\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Dfines type of the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * DurationAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DurationAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DurationAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisDataFields extends IValueAxisDataFields { }\r\n\r\n/**\r\n * Defines properties for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisProperties extends IValueAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DurationAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDurationAxisAdapters extends IValueAxisAdapters, IDurationAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create an axis that shows time durations.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DurationAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information about duration formatters.\r\n * @see {@link IDurationAxisEvents} for a list of available Events\r\n * @see {@link IDurationAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DurationAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDurationAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDurationAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DurationAxisDataItem;\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t */\r\n\tprotected _baseUnit: TimeUnit = \"second\";\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\tprotected _tooltipDurationFormat: string;\r\n\r\n\t/**\r\n\t * Axis date format chosen dynamically based on min/max and baseUnit.\r\n\t *\r\n\t * @readonly\r\n\t */\r\n\tpublic axisDurationFormat: string;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"maxZoomFactor\", 1000000);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DurationFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number, format?: string): string {\r\n\t\treturn this.durationFormatter.format(value, format || this.axisDurationFormat);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts actual min and max scale values so that the axis starts and ends\r\n\t * at \"nice\" values, unless `strictMinMax` is set.\r\n\t *\r\n\t * The `difference` can be something else than `max - min`, because of the\r\n\t * axis breaks.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param min [description]\r\n\t * @param max [description]\r\n\t * @param difference [description]\r\n\t * @param gridCount [description]\r\n\t * @param strictMode [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number, difference: number, gridCount: number, strictMode?: boolean): IMinMaxStep {\r\n\r\n\t\tlet minMaxStep: IMinMaxStep;\r\n\r\n\t\tlet timeUnit = this.baseUnit;\r\n\t\t// we don't allow to go to smaller units, setting so to avoid invalidation\r\n\t\tthis.setPropertyValue(\"maxPrecision\", 0);\r\n\r\n\t\tif (timeUnit == \"millisecond\" || timeUnit == \"second\" || timeUnit == \"minute\" || timeUnit == \"hour\") {\r\n\t\t\t// will fail if 0\r\n\t\t\tif (gridCount <= 1) {\r\n\t\t\t\tgridCount = 1;\r\n\t\t\t}\r\n\r\n\t\t\tgridCount = Math.round(gridCount);\r\n\r\n\t\t\tlet initialMin: number = min;\r\n\t\t\tlet initialMax: number = max;\r\n\r\n\t\t\t// in case min and max is the same, use max\r\n\t\t\tif (difference === 0) {\r\n\t\t\t\tdifference = Math.abs(max);\r\n\t\t\t}\r\n\r\n\t\t\tlet step = difference / gridCount;\r\n\r\n\t\t\tlet divisors = [60, 30, 20, 15, 10, 2, 1];\r\n\t\t\tlet realDivisor = 1;\r\n\r\n\t\t\tif (timeUnit == \"hour\") {\r\n\t\t\t\tdivisors = [24, 12, 6, 4, 2, 1];\r\n\t\t\t}\r\n\r\n\t\t\tfor (let divisor of divisors) {\r\n\t\t\t\tif (difference / divisor > gridCount) {\r\n\t\t\t\t\trealDivisor = divisor;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet count = Math.ceil(((max - min) / realDivisor) / gridCount);\r\n\r\n\t\t\tlet exponent: number = Math.log(Math.abs(count)) * Math.LOG10E;\r\n\t\t\tlet power = Math.pow(10, Math.floor(exponent)) / 10;\r\n\t\t\tlet reducedCount = count / power;\r\n\r\n\t\t\t// find closest to divisor\r\n\t\t\tlet closest = $math.closest(divisors, reducedCount);\r\n\t\t\tcount = closest * power;\r\n\r\n\t\t\tstep = realDivisor * count;\r\n\r\n\t\t\tlet unit = this.durationFormatter.getValueUnit(step, this.baseUnit);\r\n\r\n\t\t\tmin = Math.floor(min / step) * step;\r\n\t\t\tmax = Math.ceil(max / step) * step;\r\n\r\n\t\t\tif (strictMode) {\r\n\t\t\t\tmin -= step;\r\n\t\t\t\tif (min < 0 && initialMin >= 0) {\r\n\t\t\t\t\tmin = 0;\r\n\t\t\t\t}\r\n\t\t\t\tmax += step;\r\n\r\n\t\t\t\tif (max > 0 && initialMax <= 0) {\r\n\t\t\t\t\tmax = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tminMaxStep = { min: min, max: max, step: step };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tminMaxStep = super.adjustMinMax(min, max, difference, gridCount, strictMode);\r\n\t\t}\r\n\r\n\t\t// choose duration formatter based on step\r\n\t\tthis.axisDurationFormat = this.durationFormatter.getFormat(minMaxStep.step, minMaxStep.max, this.baseUnit);\r\n\r\n\t\treturn minMaxStep;\r\n\t}\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information.\r\n\t * @param value Duration format for axis labels\r\n\t */\r\n\tpublic set tooltipDurationFormat(value: string) {\r\n\t\tthis._tooltipDurationFormat = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Duration format for axis labels\r\n\t */\r\n\tpublic get tooltipDurationFormat(): string {\r\n\t\treturn this._tooltipDurationFormat;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a axis tooltip, based on specific position within\r\n\t * axis.\r\n\t *\r\n\t * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (numeric value)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet value: number = $math.round(this.positionToValue(position), this._stepDecimalPlaces);\r\n\t\treturn this.adapter.apply(\"getTooltipText\", this.formatLabel(value, this.tooltipDurationFormat));\r\n\t}\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * Available options: \"millisecond\", \"second\" (default), \"minute\", \"hour\",\r\n\t * \"day\", \"week\", \"month\", \"year\".\r\n\t *\r\n\t * @default \"second\"\r\n\t * @param timeUnit\r\n\t */\r\n\tpublic set baseUnit(timeUnit: TimeUnit) {\r\n\t\tif (this._baseUnit != timeUnit) {\r\n\t\t\tthis._baseUnit = timeUnit;\r\n\t\t\tthis.durationFormatter.baseUnit = timeUnit;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base unit\r\n\t */\r\n\tpublic get baseUnit(): TimeUnit {\r\n\t\treturn this._baseUnit;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.baseUnit = source.baseUnit;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DurationAxis\"] = DurationAxis;\r\nregistry.registeredClasses[\"DurationAxisDataItem\"] = DurationAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DurationAxis.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ICircleBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ICircleBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICircleBulletAdapters extends IBulletAdapters, ICircleBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class CircleBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICircleBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CircleBullet\";\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.radius = 5;\r\n\t\tcircle.isMeasured = false;\r\n\t\tthis.circle = circle;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[CircleBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.circle.copyFrom(source.circle);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CircleBullet\"] = CircleBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CircleBullet.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface IErrorBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface IErrorBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface IErrorBulletAdapters extends IBulletAdapters, IErrorBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ErrorBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IErrorBulletEvents;\r\n\r\n\tpublic errorLine:Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ErrorBullet\";\r\n\t\tthis.errorLine = this.createChild(Sprite);\r\n\t\tthis.errorLine.shouldClone = false;\r\n\t\tthis.width = 20;\r\n\t\tthis.height = 20;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.isDynamic = true;\r\n\t}\r\n\r\n\r\n\tvalidatePosition(){\r\n\t\tsuper.validatePosition();\r\n\t\tlet w = this.pixelWidth / 2;\r\n\t\tlet h = this.pixelHeight / 2;\r\n\r\n\t\tthis.errorLine.path = $path.moveTo({x:-w, y:-h}) + $path.lineTo({x:w, y:-h}) + $path.moveTo({x:0, y:-h}) + $path.lineTo({x:0, y:h}) + $path.moveTo({x:-w, y:h}) + $path.lineTo({x:w, y:h});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[ErrorBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.errorLine.copyFrom(source.errorLine);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ErrorBullet\"] = ErrorBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ErrorBullet.ts","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component, IComponentProperties, IComponentAdapters, IComponentEvents, IComponentDataFields } from \"../../core/Component\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { TextLink } from \"../../core/elements/TextLink\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class NavigationBarDataItem extends DataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: NavigationBar;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBarDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Name of the navigation bar item.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setProperty(\"name\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties[\"name\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarDataFields extends IComponentDataFields {\r\n\r\n\t/**\r\n\t * Name of nav var item.\r\n\t */\r\n\tname?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarProperties extends IComponentProperties {\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarEvents extends IComponentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[NavigationBar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface INavigationBarAdapters extends IComponentAdapters, INavigationBarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * NavigationBar class can be used to create a multi-level breadcrumb-style\r\n * navigation control.\r\n *\r\n * @see {@link INavigationBarEvents} for a list of available events\r\n * @see {@link INavigationBarAdapters} for a list of available Adapters\r\n * @todo Implement better\r\n * @important\r\n */\r\nexport class NavigationBar extends Component {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: INavigationBarEvents;\r\n\r\n\t/**\r\n\t * A list of breadcrumbs (links) in the nav bar.\r\n\t */\r\n\tpublic links: ListTemplate;\r\n\r\n\t/**\r\n\t * [_linksIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _linksIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * [_separatorsIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _separatorsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * A reference to the link which is currently active.\r\n\t */\r\n\tpublic activeLink: TextLink;\r\n\r\n\t/**\r\n\t * A list of elements used as nav bar item separators.\r\n\t */\r\n\tpublic separators: ListTemplate;\r\n\r\n\t/**\r\n\t * Identifies the type of the [[DataItem]] used in this element.\r\n\t */\r\n\tpublic _dataItem!: NavigationBarDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet textLink = new TextLink();\r\n\t\ttextLink.valign = \"middle\";\r\n\t\ttextLink.paddingTop = 8;\r\n\t\ttextLink.paddingBottom = 8;\r\n\r\n\t\tthis.paddingBottom = 2;\r\n\r\n\t\tthis.links = new ListTemplate(textLink);\r\n\t\tthis._disposers.push(new ListDisposer(this.links));\r\n\t\tthis._disposers.push(textLink);\r\n\r\n\t\tthis._linksIterator = new $iter.ListIterator(this.links, () => this.links.create());\r\n\t\tthis._linksIterator.createNewItems = true;\r\n\r\n\t\tlet triangle = new Triangle();\r\n\t\ttriangle.direction = \"right\";\r\n\t\ttriangle.width = 8;\r\n\t\ttriangle.height = 12;\r\n\t\ttriangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\ttriangle.fillOpacity = 0.5;\r\n\t\ttriangle.valign = \"middle\";\r\n\t\ttriangle.marginLeft = 10;\r\n\t\ttriangle.marginRight = 10;\r\n\r\n\t\tthis.separators = new ListTemplate(triangle);\r\n\t\tthis._disposers.push(new ListDisposer(this.separators));\r\n\t\tthis._disposers.push(triangle);\r\n\r\n\t\tlet activeLink = new TextLink();\r\n\t\tthis.activeLink = activeLink;\r\n\t\tactiveLink.copyFrom(textLink);\r\n\t\tactiveLink.valign = \"middle\";\r\n\t\tactiveLink.fontWeight = \"bold\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.layout = \"grid\";\r\n\t\tthis.dataFields.name = \"name\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Completely redraws the navigation bar.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tthis.removeChildren();\r\n\t\tthis._linksIterator.reset();\r\n\t\tsuper.validateDataElements();\r\n\t\t//@todo: dispose\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a visual element for a data item (nav item).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tlet textLink: TextLink;\r\n\t\tif (dataItem.index < this.dataItems.length - 1) {\r\n\t\t\ttextLink = this._linksIterator.getLast();\r\n\t\t\ttextLink.parent = this;\r\n\t\t\tlet separator = this.separators.create();\r\n\t\t\tseparator.parent = this;\r\n\t\t\tseparator.valign = \"middle\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttextLink = this.activeLink;\r\n\t\t\ttextLink.events.copyFrom(this.links.template.events);\r\n\t\t\ttextLink.hide(0);\r\n\t\t\ttextLink.show();\r\n\t\t\ttextLink.parent = this;\r\n\t\t}\r\n\t\ttextLink.dataItem = dataItem;\r\n\t\ttextLink.text = dataItem.name;\r\n\t\ttextLink.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NavigationBar\"] = NavigationBar;\r\nregistry.registeredClasses[\"NavigationBarDataItem\"] = NavigationBarDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/NavigationBar.ts","import * as m from \"../es2015/charts\";\nwindow.am4charts = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./charts.js\n// module id = null\n// module chunks = ","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Grid, IGridProperties, IGridAdapters, IGridEvents } from \"./Grid\";\r\nimport { Axis, AxisItemLocation } from \"./Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[GridCircular]].\r\n */\r\nexport interface IGridCircularProperties extends IGridProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[GridCircular]].\r\n */\r\nexport interface IGridCircularEvents extends IGridEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GridCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGridCircularAdapters extends IGridAdapters, IGridCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a circular grid element for circular-type axis.\r\n *\r\n * @see {@link IGridCircularEvents} for a list of available events\r\n * @see {@link IGridCircularAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the GridCircular, also with 3d charts we might need some additional elements\r\n */\r\nexport class GridCircular extends Grid {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGridCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGridCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGridCircularEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GridCircular\";\r\n\t\tthis.pixelPerfect = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GridCircular\"] = GridCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/GridCircular.ts"],"sourceRoot":""}