{"version":3,"sources":["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/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/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/elements/FlowDiagramNode.ts","webpack:///../../../../../src/.internal/charts/elements/FlowDiagramLink.ts","webpack:///../../../../../src/.internal/charts/types/FlowDiagram.ts","webpack:///../../../../../src/.internal/charts/elements/LabelBullet.ts","webpack:///../../../../../src/.internal/charts/elements/SankeyNode.ts","webpack:///../../../../../src/.internal/charts/elements/SankeyLink.ts","webpack:///../../../../../src/.internal/charts/types/SankeyDiagram.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/elements/Column.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/elements/Column3D.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/elements/FunnelSlice.ts","webpack:///../../../../../src/.internal/charts/elements/FunnelTick.ts","webpack:///../../../../../src/.internal/charts/series/FunnelSeries.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:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///./charts.js"],"names":["DateAxisBreak_DateAxisBreak","_super","DateAxisBreak","_this","call","this","className","applyTheme","tslib_es6","Object","defineProperty","prototype","getPropertyValue","value","setPropertyValue","startValue","getTime","axis","invalidate","invalidateSeries","endValue","ValueAxisBreak","Registry","registeredClasses","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","Dictionary","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","tooltipPosition","pushAll","axisFieldName","fillRule","dataItem","component","gridInterval","_gridInterval","gridDuration","Time","Math","round","min","axisFill","__disabled","applyInternalDefaults","hasKey","setKey","language","translate","createDataItem","createAxisBreak","validateDataItems","start","end","periodCount","max","baseDuration","maxZoomFactor","_deltaMinMax","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","adjustDifference","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","getFirstWeekDay","dateFormatter","utc","_nextGridUnit","_intervalDuration","ceil","_difference","floor","Iterator","series","iterator","baseAxis","field_1","getAxisField","minZoomed","minZoomedStr","toString","startDataItem","dataItemsByAxis","getKey","uid","startIndex","findFirst","index","dataItems","findClosestIndex","x","maxZoomed","maxZoomedStr","endDataItem","endIndex","length","dataRangeInvalid","validateDataRange","time","key","previousDataItem","getIndex","previousDate","validateData","Type","minDifference","Number","MAX_VALUE","each","seriesDataChangeUpdate","postProcessSeriesDataItems","JSON","stringify","_baseInterval","postProcessSeriesDataItem","addEmptyUnitsBreaks","utils_Object","getDate","startTime","setCalculatedValue","skipEmptyPeriods","axisBreaks","clear","axisBreak","this_1","startTimeStr","undefined","create","startDate","fixAxisBreaks","breakGridCount","endPosition","startPosition","adjustedEndValue","adjustedStartValue","gridDate","firstDayOfWeek","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","isInBreak","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","resetIterators","this_2","format","markUnitChange","text","find","appendDataItem","validateDataElement","renderer_1","renderer","breakSize","timeUnit_1","intervalCount_1","utils_Math","startPoint","endPoint","minGridDistance","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","position","valueToPosition","fillEndPosition","isRange","tick","disabled","updateTickElement","grid","updateGridElement","fill","updateFillElement","mask","bullet","updateBullet","label","location_1","location","updateLabelElement","adjustMinMax","step","fixMin","startLocation","fixMax","endLocation","duration","gridCount","intervalDuration","lastIndex","formatLabel","dateToPosition","anyToPosition","dateToPoint","point","positionToPoint","angle","positionToAngle","y","anyToPoint","valueToPoint","positionToDate","positionToValue","getPositionX","stackKey","range","getTimeByLocation","baseValue","getPositionY","stack","getValue","getAngle","workingLocations","endTime","workingValue","difference","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","abs","differece","updateAxisBySeries","timeInterval","invalidateData","breakTemplate","template","startLine","endLine","fillShape","getTooltipText","tooltipDateFormat","dateFormat","getPositionLabel","adapter","apply","roundPosition","getCellStartPosition","getCellEndPosition","getSeriesDataItem","findNearest","key_1","Infinity","getCurrentLabelFormat","initRenderer","ticks","labels","baseGrid","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","xAxis","dateX","yAxis","dateY","closestTime_1","tooltipLocation","showTooltipAtDataItem","chart","_seriesPoints","push","tooltipText","tooltipHTML","hideTooltip","makeGap","previous","connect","autoGapCount","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","indexToPosition","invalidateDataItems","category","categoryToIndex","AxisBreak","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","seriesDataItems","locations","endCategory","isEnabled","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","_lastDataItem","_disposers","categoryAxisDataItem","seriesId","_series","invalidateDataRange","positionToIndex","minIndex","maxIndex","i","axisDataItem","i_1","seriesDataItem","validate","dataCount","invalid","maxCount","axisLength","frequency","_startIndex","_endIndex","_frequency","itemIndex","len","frequency_1","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","fillEndIndex","fillPosition","AxisRendererY","measuredWidth","AxisRendererX","measuredHeight","html","currentText","disposeData","processDataItem","dataContext","getDataItem","dataFields","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","getPositionRangePath","getFirstSeriesDataItem","categoryX","categoryY","getLastSeriesDataItem","index_1","sdi_1","category_1","getX","basePoint","categories","getY","breakStartPosition","breakEndPosition","breakPosition","positionToCategory","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","isMeasured","cursorTooltipEnabled","cursorHoverEnabled","excludeFromTotal","mainContainer","Sprite","setElement","paper","add","stacked","tooltip","pointerOrientation","events","on","returnBulletDefaultState","readerTitle","dataChangeUpdate","_tmin","_tmax","_smin","_smax","defineFields","data","updateItemReaderText","_xField","_yField","Error","name","disable","enable","setInitialWorkingValues","e","_chart","raiseCriticalError","updateDataItem","dataItemsX","clearCatAxis","dataItemsY","xAxisFieldName","xField","xOpenField","Utils","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","fillPath","path","Path","width","height","pixelY","pixelX","_showBullets","minBulletDistance","get","xAxes","oldAxis","removeKey","dispose","removeValue","set","registerSeries","yAxes","_baseAxis","processValues","minX","maxX","minY","maxY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","stackedSeries","isDisposed","dispatchImmediately","appeared","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","isShowing","getAdjustedXLocation","getAdjustedYLocation","cursor","hideSeriesTooltipsOnSelection","selection","downPoint","updateLegendValue","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","type","target","_a","sprites","_b","next","done","sprite","parent","isHidden","isHover","showTooltip","shouldCreateBullet","bulletTemplate","hasValue","disabledField","propertyFields","positionBullet","bulletLocationX","getBulletLocationX","bulletLocationY","getBulletLocationY","locationX","locationY","moveTo","bulletLocation","show","anim","delay","interpolationDuration","defaultState","transitionDuration","a","sequencedInterpolation","sequencedInterpolationDelay","animation","isFinished","hide","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","invalidateProcessedData","backwards","prevSeries","prevDataItem","prevValue","prevRealValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processConfig","config","map","processingErrors","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","XYChartScrollbar_XYChartScrollbar","XYChartScrollbar","interfaceColors","InterfaceColorSet","padding","scrollbarChart","createChild","XYChart_XYChart","shouldClone","margin","interactionsEnabled","_scrollbarChart","minHeight","minWidth","unselectedOverlay","getFor","fillOpacity","toBack","_unselectedOverlay","background","cornerRadius","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","event","sourceSeries","newValue","zoomOutButton","addXAxis","addYAxis","clone","title","rangeChangeDuration","id","inside","line","strokeOpacity","minLabelPosition","maxLabelPosition","axisFills","vAxis_1","clonedFrom","vAxis_2","stroke","vAxis_3","vAxis_4","showOnInit","zoomOutAxes","filters","DesaturateFilter","updateByOrientation","orientation","oldValue","off","handleDataChanged","dataProvider","updateThumb","w","pixelWidth","h","pixelHeight","Scrollbar","XYChart_XYChartDataItem","XYChartDataItem","SerialChart","XYChart","_axisRendererX","_axisRendererY","maskBullets","arrangeTooltips","chartContainer","layout","topAxesCont","Container","Percent","zIndex","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","plotContainer","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","axisBulletsContainer","_bulletMask","exportable","draw","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","reinit","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","inversed","opposite","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","updateSeriesMasks","_xAxes","handleAxisRemoval","autoDispose","_yAxes","removeFromInvalidComponents","dataInvalid","colors","_cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","tapToActivate","setTapToActivate","xPosition_1","yPosition_1","showSeriesTooltip","exceptAxis","snapToSeries","xAxis_1","yAxis_1","closestDataItem_1","minDistance_1","dxPosition","toGlobalPosition","axisFullLength","dyPosition","distance","sqrt","pow","showAxisTooltip","sortSeriesTooltips","hideObjectTooltip","seriesPoints","setBounds","topLeft","bottomRight","sum","filteredSeriesPoints","seriesPoint","sort","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","behavior","xRange","priority","yRange","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","maxPanOut","panStartRange","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","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","addScrollbarData","removeScrollbarData","remove","dataUser","removeData","interactions","isTouchProtected","handleTapToActivate","handleTapToActivateDeactivation","Responsive","relevant","maybeXS","state","stateId","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","Color","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","tensionX","tensionY","segmentsContainer","initialY","setWorkingValue","setWorkingLocation","initialX","notRange","segment","tooltipColorSource","reset","openSegmentWrapper","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","property","openIndex","params","openSegment","addToClose","closeIndex","propertiesChanged","getFirst","contents","valuesFound","hasProperties","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","Line","x2","Rectangle","legendDataItem","color","colorOrig","bullets","Bullet","copyToLegendMarker","hasLabels","children","child","Label","RadarSeries_RadarSeriesDataItem","RadarSeriesDataItem","RadarSeries_RadarSeries","RadarSeries","connectEnds","radius","startAngle","endAngle","pixelRadius","pixelInnerRadius","unshift","AxisFillCircular_AxisFillCircular","AxisFillCircular","element","innerRadius","setPercentProperty","AxisFill","GridCircular_GridCircular","GridCircular","pixelPerfect","Grid","AxisRendererCircular_AxisRendererCircular","AxisRendererCircular","pixelRadiusReal","useChartAngles","setAxis","cos","atan2","sin","PI","coordinate","positionToCoordinate","arc","updateAxisLine","gridInnerRadius","toggleVisibility","tickLength","AxisBullet","positionItem","fixPosition","fitsToBounds","invalidateAxisItems","createGrid","createFill","createLabel","AxisLabelCircular","pointToPosition","coordinateToPosition","AxisRenderer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","horizontalCenter","verticalCenter","rotation","gridLocation","count_1","cellEndLocation","updateBaseGridElement","count_2","updateBreakElement","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","bigNum","RadarChart_RadarChartDataItem","RadarChartDataItem","RadarChart_RadarChart","RadarChart","innerRadiusModifyer","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","innerWidth","hr","innerHeight","mr","maxRadius","diameter","_pixelInnerRadius","definedBBox","validatePosition","ClockHand_ClockHand","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","easing","_value","newAngle","currentAngle","rotationDirection","animate","to","updateValue","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","processHand","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries","PieSeries3D_PieSeries3D","PieSeries3D","createSlice","Slice3D","slice","depth","depthPercent","percent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","PercentChart","SlicedChart_SlicedChart","SlicedChart","FlowDiagramNode_FlowDiagramNode","FlowDiagramNode","legendSettings","Legend","draggable","inert","setStateOnChildren","invalidateLinks","handleHit","outgoingDataItems","toNode","incomingDataItems","fromNode","link","colorMode","gradient","stop_1","stops","stop_2","_incomingDataItems","sortBy","_incomingSorted","utils_String","fromName","Order","utils_Number","_outgoingDataItems","_outgoingSorted","setColorProperty","_background","removeChildren","column","RoundedRectangle","_legendDataItem","itemContainer","deepInvalidate","FlowDiagramLink_FlowDiagramLink","FlowDiagramLink","positionBullets","_bulletsContainer","_bulletsMask","bulletsMask","middleLine","rotationField","addColor","setFill","_gradient","measureElement","_bullets","Polyline","getTooltipX","getTooltipY","LinearGradient","FlowDiagram_FlowDiagramDataItem","FlowDiagramDataItem","toName","_link","link_1","links","addSprite","Chart","FlowDiagram_FlowDiagram","FlowDiagram","ColorSet","nodePadding","minNodeSize","linksContainer","nodesContainer","nodes","sortNodes","low","high","node","strokeModifier","LinearGradientModifier","opacities","fillModifier","strNode","getNodeValue","feedLegend","_sorted","sortedIterator","total","incomingTotal","outgoingTotal","totalIncoming","totalOutgoing","changeSorting","_nodes","createNode","_links","createLink","legend","legendData_1","LabelBullet_LabelBullet","LabelBullet","truncate","hideOversized","handleMaxSize","SankeyNode_SankeyNode","SankeyNode","nextInCoord","nextOutCoord","nameLabel","valueLabel","orientation_1","dx","dy","endX","endY","linkWidth","valueHeight","startX","startY","SankeyLink_SankeyLink","SankeyLink","tension","controlPointDistance","Polyspline","isTemplate","y0","y1","xt0","yt0","xt1","yt1","xb0","xb1","yb0","yb1","xm0","xm1","ym0","ym1","_bbox","cpd","kxt0","kyt0","kxt1","kyt1","kxm0","kym0","kxm1","kym1","kxb0","kyb0","kxb1","kyb1","SankeyDiagram_SankeyDiagramDataItem","SankeyDiagramDataItem","SankeyDiagram_SankeyDiagram","SankeyDiagram","nodeAlign","_levelCount","level","getNodeLevel","levels","calculateValueHeight","_levelSum","_levelNodesCount","maxSum","availableHeight","maxSumLevel","realValue","_maxSumLevel","maxSumLevelNodeCount","finalHeight","_heightAnimation","animationOptions","err","Animation","from","interpolationEasing","container","nextCoordinate","levelCoordinate","nodeCount","showReal","container_1","nodeHeight","_valueHeight","ChordNode_ChordNode","ChordNode","updateRotation","Slice","ix","iy","arc_1","sliceStartAngle_1","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","nonRibbon","percentWidth","valueAngle","mAngle","trueStartAngle","tx","ty","QuadraticCurve_QuadraticCurve","QuadraticCurve","y2","cpx","cpy","p1","p2","cp","d","point1","point2","ChordLink_ChordLink","ChordLink","fromX","fromY","toX","toY","mAngle1","mAngle2","ChordDiagram_ChordDiagramDataItem","ChordDiagramDataItem","ChordDiagram_ChordDiagram","ChordDiagram","chordContainer","newTotal","Column_Column","Column","createAssets","handleKidAdded","ColumnSeries_ColumnSeriesDataItem","ColumnSeriesDataItem","_column","setColumn","columns","_rangesColumns","ColumnSeries_ColumnSeries","ColumnSeries","_startLocation","_endLocation","clustered","columnsContainer","_columnsContainer","baseAxisSeries","clusterCount","cellStartLocation","disableUnusedColumns","validateDataElementReal","getStartLocation","simplifiedProcessing","getEndLocation","l","r","t","percentHeight","pixelPaddingLeft","pixelPaddingRight","paddingTop","pixelPaddingTop","paddingBottom","pixelPaddingBottom","outOfBounds","offset","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","axisLenght","console","log","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","ev","populateString","realX","realY","realWidth","realHeight","virtualParent","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","open_1","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","createColumnTemplate","fromOpenState_1","fromPreviousState_1","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","toValue","TreeMapSeries_TreeMapSeries","TreeMapSeries","configField","hideReal","TreeMap_TreeMapDataItem","TreeMapDataItem","rows","hasChildren","getDuration","childValue","TreeMap_TreeMap","TreeMap","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","_tempSeries","homeDataItem","_homeText","getMinMax","layoutItems","_updateDataItemIndexes","navigationData","parentDataItem","initSeries","reverse","createTreeSeriesReal","setData","currentlyZoomed","cursorOverStyle","Mouse","pointer","zoomToSeriesDataItem","toggleBullets","rangeChangeAnimation","_dataDisposers","once","binaryTree","dice","sliceDice","validateLayout","validateRawData","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","i0","i1","row","handleSeriesAdded2","handleDataItemValueChange","getLegendLevel","legendParent","getExporting","exporting","info","AxisRendererX3D_AxisRendererX3D","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D_AxisRendererY3D","AxisRendererY3D","getWidth","Column3D_Column3D","Column3D","column3D","Rectangle3D","ColumnSeries3D_ColumnSeries3DDataItem","ColumnSeries3DDataItem","ColumnSeries3D_ColumnSeries3D","ColumnSeries3D","XYChart3D_XYChart3DDataItem","XYChart3DDataItem","XYChart3D_XYChart3D","XYChart3D","fixLayout","fixColumns","depthIndex","s","inversed_1","maskColumns","Candlestick_Candlestick","Candlestick","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","startLocationX","endLocationX","startLocationY","endLocationY","prevPoint","point0","RadarColumn_RadarColumn","RadarColumn","radarColumn","RadarColumnSeries_RadarColumnSeriesDataItem","RadarColumnSeriesDataItem","RadarColumnSeries_RadarColumnSeries","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","temp","FunnelSlice_FunnelSlice","FunnelSlice","bottomWidth","topWidth","expandDistance","pt","pb","pr","pl","ed","tl","tw","tr","br","bw","bl","cpr","cpl","qp1","qp2","tickPoint","tt","tb","bt","bb","mlx","mty","FunnelTick_FunnelTick","FunnelTick","_label","_slice","labelsOpposite","maxRight","p0","maxBottom","Tick","FunnelSeries_FunnelSeriesDataItem","FunnelSeriesDataItem","_sliceLink","sliceLink_1","sliceLinks","slicesContainer","PercentSeries","FunnelSeries_FunnelSeries","FunnelSeries","_nextY","labelsContainer","bottomRatio","createTick","initSlice","scale","handleSliceScale","handleSliceMove","initLabel","labelTemplate","alignLabels","dItem","_total","_count","arrangeLabels","getNextValue","nextValue","nextItem","formDataElement","sliceLink","decorateSlice","linkHeight","lastLabel","lastY","lastX","_sliceLinks","setAlignLabels","labelAlign","labelValign","PyramidSeries_PyramidSeriesDataItem","PyramidSeriesDataItem","PyramidSeries_PyramidSeries","PyramidSeries","pyramidHeight","valueIs","_nextWidth","relValue","_pyramidHeight","_pyramidWidth","ticksContainer","pyramidWidth","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","square","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","slices","hs","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","radiusY","CurvedColumn_CurvedColumn","CurvedColumn","curvedColumn","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","LOG10E","power","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","Cursor_Cursor","Cursor","_stick","trackable","clickable","interaction","Interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","touch","_generalBehavior","isLocalElement","svg","_stickPoint","triggerMove","stick","triggerMoveReal","invalidatePosition","getPositions","dispatch","triggerDown","triggerDownReal","setGlobalStyle","grabbing","triggerUp","triggerUpReal","updatePoint","upPoint","_upPointOrig","_downPointOrig","getHitOption","default","updateSelection","cancelable","shouldPreventGestures","preventDefault","lockElement","XYCursor_XYCursor","XYCursor","_lineX","_lineY","lineX","strokeDasharray","lineY","updateSize","_usesSelection","_positionPrecision","fixPoint","updateLinePositions","getPanningRanges","selectionX","selectionY","getRanges","deltaX","deltaY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","_selection","_snapToDisposer","handleSnap","xx","yy","animationDuration","animationEasing","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius","window","am4charts","charts_namespaceObject"],"mappings":"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","file":"charts.js","sourcesContent":["/**\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 { DateAxis } from \"./DateAxis\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\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 { 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 { LineSeriesDataItem } from \"../series/LineSeries\";\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 * 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\nimport { IRange } from \"../../core/defs/IRange\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\t\tthis.tooltipPosition = \"pointer\";\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\tthis._deltaMinMax = this.baseDuration / 2;\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, this.getFirstWeekDay(), this.dateFormatter.utc);\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.max(-5, 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, this.dateFormatter.utc);\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\tlet minZoomed = $time.round(new Date(this._minZoomed), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\t\t\tlet minZoomedStr = minZoomed.toString();\r\n\t\t\t\tlet startDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(minZoomedStr);\r\n\t\t\t\tlet startIndex: number = 0;\r\n\t\t\t\tif (this.start != 0) {\r\n\t\t\t\t\tif (startDataItem) {\r\n\t\t\t\t\t\tstartDataItem = this.findFirst(startDataItem, minZoomed, field);\r\n\t\t\t\t\t\tstartIndex = startDataItem.index;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tstartIndex = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\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 baseInterval = this.baseInterval;\r\n\t\t\t\tlet maxZoomed = $time.add($time.round(new Date(this._maxZoomed), baseInterval.timeUnit, baseInterval.count, this.getFirstWeekDay(), this.dateFormatter.utc), baseInterval.timeUnit, baseInterval.count, this.dateFormatter.utc).getTime();\r\n\r\n\t\t\t\tlet maxZoomedStr = maxZoomed.toString();\r\n\t\t\t\tlet endDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(maxZoomedStr);\r\n\t\t\t\tlet endIndex: number = series.dataItems.length;\r\n\t\t\t\tif (this.end != 1) {\r\n\t\t\t\t\tif (endDataItem) {\r\n\t\t\t\t\t\tendIndex = endDataItem.index;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tmaxZoomed -= 1;\r\n\t\t\t\t\t\tendIndex = series.dataItems.findClosestIndex(maxZoomed, (x) => x[field], \"right\");\r\n\r\n\t\t\t\t\t\tif (endIndex > 0) {\r\n\t\t\t\t\t\t\tendIndex++;\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\tseries.startIndex = startIndex;\r\n\t\t\t\tseries.endIndex = endIndex;\r\n\r\n\t\t\t\tif (series.dataRangeInvalid) {\r\n\t\t\t\t\tseries.validateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected findFirst(dataItem: XYSeriesDataItem, time: number, key: string): XYSeriesDataItem {\r\n\t\tlet index = dataItem.index;\r\n\t\tif (index > 0) {\r\n\t\t\tlet series = dataItem.component;\r\n\t\t\tlet previousDataItem = series.dataItems.getIndex(index - 1);\r\n\t\t\tlet previousDate = (previousDataItem)[key];\r\n\t\t\tif (!previousDate || previousDate.getTime() < time) {\r\n\t\t\t\treturn dataItem;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this.findFirst(previousDataItem, time, key);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t}\r\n\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\tlet minDifference = Number.MAX_VALUE;\r\n\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, this.getFirstWeekDay(), this.dateFormatter.utc);\r\n\t\t\tlet startTime = startDate.getTime();\r\n\t\t\tlet endDate: Date = $time.add(new Date(startTime), baseInterval.timeUnit, baseInterval.count, this.dateFormatter.utc);\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, this.getFirstWeekDay(), this.dateFormatter.utc);\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, this.dateFormatter.utc);\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, this.getFirstWeekDay(), this.dateFormatter.utc);\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, this.dateFormatter.utc);\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 * @ignore\r\n\t */\r\n\tprotected getFirstWeekDay(): number {\r\n\t\tif (this.dateFormatter) {\r\n\t\t\treturn this.dateFormatter.firstDayOfWeek;\r\n\t\t}\r\n\r\n\t\treturn 1;\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, this.getFirstWeekDay(), this.dateFormatter.utc);\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, this.dateFormatter.utc).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 && axisBreak.endDate) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount, this.getFirstWeekDay(), this.dateFormatter.utc);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount, this.dateFormatter.utc);\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, this.getFirstWeekDay(), this.dateFormatter.utc);\r\n\t\t$time.add(date, timeUnit, count, this.dateFormatter.utc);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate($time.copy(prevGridDate), intervalCount);\r\n\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount, this.dateFormatter.utc);\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, this.dateFormatter.utc)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet text = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\t$iter.each(this.axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count, this.dateFormatter.utc).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, this.dateFormatter.utc);\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, this.dateFormatter.utc)) {\r\n\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet text: string = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > this.baseInterval.count) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / (this._gridInterval.count / this.baseInterval.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\tif (dataItem.bullet) {\r\n\t\t\t\trenderer.updateBullet(dataItem.bullet, 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\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\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\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, this.getFirstWeekDay(), this.dateFormatter.utc).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count, this.dateFormatter.utc).getTime();\r\n\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, this.getFirstWeekDay(), this.dateFormatter.utc).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count, this.dateFormatter.utc).getTime();\r\n\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\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 relative position on axis for series' data item's value.\r\n\t *\r\n\t * @since 4.5.14\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 Relative position\r\n\t */\r\n\tpublic getPositionX(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): 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\r\n\t\tlet position = this.valueToPosition(value);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns relative position on axis for series' data item's value.\r\n\t *\r\n\t * @since 4.5.14\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 Relative position\r\n\t */\r\n\tpublic getPositionY(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): 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\tlet position = this.valueToPosition(value + stack);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\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 * @param range Range to fit in\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): 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\tlet position = this.valueToPosition(value + stack);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(position);\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\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\tlet workingValue = dataItem.values[key].workingValue;\r\n\t\tlet value = dataItem.values[key].value;\r\n\r\n\t\tlet difference = value - workingValue;\r\n\t\tstartTime -= difference;\r\n\t\tendTime -= difference;\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\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\r\n\t\t// handle short months\r\n\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\tif (baseInterval.timeUnit == \"month\") {\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 2) && baseInterval.count == 1) {\r\n\t\t\t\tbaseInterval.count = 2;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 3) && baseInterval.count == 2) {\r\n\t\t\t\tbaseInterval.count = 3;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 6) && baseInterval.count == 5) {\r\n\t\t\t\tbaseInterval.count = 6;\r\n\t\t\t}\r\n\t\t}\r\n\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\tif (this.minDifference >= $time.getDuration(\"week\", 1) - $time.getDuration(\"hour\", 1) && baseInterval.timeUnit == \"day\") {\r\n\t\t\tbaseInterval.timeUnit = \"week\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tif (this.minDifference >= $time.getDuration(\"year\", 1) - $time.getDuration(\"day\", 1.01) && baseInterval.timeUnit == \"month\") {\r\n\t\t\tbaseInterval.timeUnit = \"year\";\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 * For best results, try to follow these values for `count`:\r\n\t *\r\n\t * When unit is \"month\", use 12 / count = round number\r\n\t * When unit is \"hour\", use 24 / count = round number\r\n\t * When unit is \"second\" and \"minute\", use 60 / count = round number\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\tif (!$type.isNumber(timeInterval.count)) {\r\n\t\t\t\ttimeInterval.count = 1;\r\n\t\t\t}\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, this.getFirstWeekDay(), this.dateFormatter.utc, new Date(this.min));\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, this.getFirstWeekDay(), this.dateFormatter.utc);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count, this.dateFormatter.utc);\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, this.dateFormatter.utc);\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, this.getFirstWeekDay(), this.dateFormatter.utc);\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\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) => {\r\n\t\t\t\tif (x[key]) {\r\n\t\t\t\t\treturn x[key].getTime();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn -Infinity;\r\n\t\t\t\t}\r\n\t\t\t}, \"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\r\n\t\tif (this.snapTooltip) {\r\n\t\t\t// rounding is not good, pen/aac4e7f66f019d36b2447f050c600c13 (no last tootltip shown)\r\n\t\t\tlet actualDate = this.positionToDate(position) //$time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1, this.getFirstWeekDay(), this.dateFormatter.utc);\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\t\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\r\n\t\t\t\t\tif (dataItem) {\r\n\t\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!closestDate) {\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\telse {\r\n\t\t\t\t\t\t\tif (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\t\tclosestDate = date;\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\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, this.getFirstWeekDay(), this.dateFormatter.utc);\r\n\t\t\t\tclosestTime = closestDate.getTime();\r\n\r\n\t\t\t\tlet tooltipLocation = this.renderer.tooltipLocation;\r\n\t\t\t\tif (tooltipLocation == 0) {\r\n\t\t\t\t\ttooltipLocation = 0.0001;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration * tooltipLocation);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\r\n\t\t\t\tthis.series.each((series) => {\r\n\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\tthis.chart._seriesPoints.push({ series: series, point: point });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// check, otherwise column tooltip will be hidden\r\n\t\t\t\t\t\tif (series.tooltipText || series.tooltipHTML) {\r\n\t\t\t\t\t\t\tseries.hideTooltip();\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//this.chart.sortSeriesTooltips(seriesPoints);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Current grid interval.\r\n\t *\r\n\t * @return Grid interval\r\n\t */\r\n\tpublic get gridInterval(): ITimeInterval {\r\n\t\treturn this._gridInterval;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic makeGap(dataItem: LineSeriesDataItem, previous: LineSeriesDataItem): boolean {\r\n\t\tlet series = dataItem.component;\r\n\t\tif (dataItem && previous) {\r\n\t\t\tif (!series.connect && $type.isNumber(series.autoGapCount)) {\r\n\t\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\t\tlet time = dataItem.dates[\"date\" + this.axisLetter].getTime();\r\n\t\t\t\t\tlet prevTime = previous.dates[\"date\" + this.axisLetter].getTime();\r\n\r\n\t\t\t\t\tif (time - prevTime > series.autoGapCount * this.baseDuration) {\r\n\t\t\t\t\t\treturn true;\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 false;\r\n\t}\r\n\r\n\t/**\r\n\t * @return base value\r\n\t */\r\n\tpublic get baseValue(): number {\r\n\t\treturn this.min;\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[\"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 { 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 { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisRendererX } from \"./AxisRendererX\";\r\nimport { AxisRendererY } from \"./AxisRendererY\";\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 * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { Adapter } from \"../../core/utils/Adapter\";\r\nimport { IRange } from \"../../core/defs/IRange\";\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\tpublic seriesDataItems: { [index: string]: XYSeriesDataItem[] } = {};\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 * 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\t\tsuper.processSeriesDataItem(dataItem, axisLetter);\r\n\t\tlet category: string = (dataItem)[\"category\" + this.axisLetter];\r\n\r\n\t\tlet categoryAxisDataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\tif (categoryAxisDataItem) {\r\n\t\t\tlet seriesId = dataItem.component.uid;\r\n\t\t\tlet seriesDataItems = categoryAxisDataItem.seriesDataItems[seriesId];\r\n\t\t\tif (!seriesDataItems) {\r\n\t\t\t\tseriesDataItems = [];\r\n\t\t\t\tcategoryAxisDataItem.seriesDataItems[seriesId] = seriesDataItems;\r\n\t\t\t}\r\n\t\t\tseriesDataItems.push(dataItem);\r\n\t\t}\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 startIndex = this.positionToIndex(this.start);\r\n\t\t\t\tlet endIndex = this.positionToIndex(this.end);\r\n\r\n\t\t\t\tif (endIndex >= this.dataItems.length) {\r\n\t\t\t\t\tendIndex--;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet seriesId = series.uid;\r\n\t\t\t\tlet minIndex: number;\r\n\t\t\t\tlet maxIndex: number;\r\n\r\n\t\t\t\tfor (let i = startIndex; i <= endIndex; i++) {\r\n\t\t\t\t\tlet axisDataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif (axisDataItem) {\r\n\t\t\t\t\t\tlet seriesDataItems = axisDataItem.seriesDataItems[seriesId];\r\n\r\n\t\t\t\t\t\tif (seriesDataItems) {\r\n\t\t\t\t\t\t\tfor (let i = 0; i < seriesDataItems.length; i++) {\r\n\t\t\t\t\t\t\t\tlet seriesDataItem = seriesDataItems[i];\r\n\t\t\t\t\t\t\t\tif (seriesDataItem) {\r\n\t\t\t\t\t\t\t\t\tlet index = seriesDataItem.index;\r\n\t\t\t\t\t\t\t\t\tif (!$type.isNumber(minIndex) || index < minIndex) {\r\n\t\t\t\t\t\t\t\t\t\tminIndex = index;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif (!$type.isNumber(maxIndex) || index > maxIndex) {\r\n\t\t\t\t\t\t\t\t\t\tmaxIndex = index;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\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}\r\n\r\n\t\t\t\tif ($type.isNumber(minIndex)) {\r\n\t\t\t\t\tseries.startIndex = minIndex;\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 ($type.isNumber(maxIndex)) {\r\n\t\t\t\t\tseries.endIndex = maxIndex + 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\t//this.validateDataElement(dataItem, itemIndex); // helps to solve shrinking // not good - creates all items\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 ((renderer instanceof AxisRendererY && dataItem.label.measuredWidth > this.ghostLabel.measuredWidth) || (renderer instanceof AxisRendererX && dataItem.label.measuredHeight > this.ghostLabel.measuredHeight)) {\r\n\t\t\t\tif (dataItem.label.html) {\r\n\t\t\t\t\tthis.ghostLabel.html = dataItem.label.currentText;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t\t}\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\t\tif (dataItem.bullet) {\r\n\t\t\trenderer.updateBullet(dataItem.bullet, position, endPosition);\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\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tthis.dataItemsByCategory.clear();\r\n\t\tsuper.disposeData();\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\t//let existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\t//if (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\r\n\tprotected getDataItem(dataContext?: any): this[\"_dataItem\"] {\r\n\t\tlet category: string = (dataContext[this.dataFields.category]);\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.dataItems.create();\r\n\t\t}\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\r\n\t */\r\n\tpublic getFirstSeriesDataItem(series: XYSeries, category: string): 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\r\n\t */\r\n\tpublic getLastSeriesDataItem(series: XYSeries, category: string): XYSeriesDataItem {\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\tif (index >= this.dataItems.length) {\r\n\t\t\t\tindex--;\r\n\t\t\t}\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\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\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\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, stackKey?: string, range?: IRange): number {\r\n\r\n\t\tlet position = this.getPositionX(dataItem, key, location, stackKey, range);\r\n\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 relative position on axis for series' data item.\r\n\t *\r\n\t * @since 4.5.14\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 Relative position\r\n\t */\r\n\tpublic getPositionX(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): 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\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\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, stackKey?: string, range?: IRange): number {\r\n\r\n\t\tlet position = this.getPositionY(dataItem, key, location, stackKey, range);\r\n\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 relative position on axis for series' data item.\r\n\t *\r\n\t * @since 4.5.14\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 Relative position\r\n\t */\r\n\tpublic getPositionY(dataItem: XYSeriesDataItem, key?: string, location?: number, stackKey?: string, range?: IRange): 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\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\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 * @param range Range to fit in\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet position = this.categoryToPosition(dataItem.categories[key], location);\r\n\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(position);\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\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\tif (position > 1) {\r\n\t\t\tposition = 1;\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 - this.startLocation - (1 - this.endLocation);\r\n\r\n\t\tposition += 1 / difference * this.startLocation;\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 >= this.dataItems.length) {\r\n\t\t\tindex = this.dataItems.length - 1;\r\n\t\t}\r\n\t\t// not good, when panning out of bounds, each time one less item gets selected\r\n\t\t//if (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 * This is a synonim of `getPositionLabel()` implemented here for consistentcy.\r\n\t *\r\n\t * @since 4.3.8\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 positionToCategory(position: number): string {\r\n\t\treturn this.getPositionLabel(position);\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\t/**\r\n\t * Current frequency of labels of the axis.\r\n\t *\r\n\t * Normally it would be 1, but when labels start to be hidden due\r\n\t * to `minGridDistance` this read-only property will increase.\r\n\t *\r\n\t * @readonly\r\n\t * @since 4.2.0\r\n\t * @return Label frequency\r\n\t */\r\n\tpublic get frequency(): number {\r\n\t\treturn this._frequency;\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 } 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 { XYCursor } from \"../cursors/XYCursor\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\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 * 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.setCategory(\"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.setCategory(\"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\r\n\t * 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\t * @default true\r\n\t */\r\n\tcursorTooltipEnabled?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series should apply hover state on bullets/columns/etc when\r\n\t * cursor is over the data item.\r\n\t * \r\n\t * @default true\r\n\t */\r\n\tcursorHoverEnabled?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series' values should be excluded when calculating totals.\r\n\t * \r\n\t * @default false\r\n\t */\r\n\texcludeFromTotal?: 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\t/**\r\n\t * Dataitem of previously shown tooltip, used to avoid multiple\r\n\t * tooltipshownat dispatches.\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _baseInterval: { [index: string]: ITimeInterval } = {};\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.cursorHoverEnabled = true;\r\n\t\tthis.excludeFromTotal = false;\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\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\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 *\r\n\t * When validating raw data, instead of processing data item, we update it\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param item\r\n\t */\r\n\tprotected updateDataItem(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.updateDataItem(dataItem);\r\n\r\n\t\t//dataItem.events.disable();\r\n\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\t\t//dataItem.events.enable();\t\t\r\n\t}\r\n\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\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis.clearCatAxis(this.xAxis);\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\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis.clearCatAxis(this.yAxis);\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\tprotected clearCatAxis(axis: CategoryAxis) {\r\n\t\tlet uid = this.uid;\r\n\t\taxis.dataItems.each((dataItem) => {\r\n\t\t\tif (dataItem.seriesDataItems[uid]) {\r\n\t\t\t\tdataItem.seriesDataItems[uid] = [];\r\n\t\t\t}\r\n\t\t})\r\n\t}\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\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\tif (stackY < minY) {\r\n\t\t\t\t\t\tminY = stackY\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (stackY > maxY) {\r\n\t\t\t\t\t\tmaxY = stackY;\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 (stackX < minX) {\r\n\t\t\t\t\t\tminX = stackX;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (stackX > maxX) {\r\n\t\t\t\t\t\tmaxX = stackX;\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\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\tlet stackedSeries = this.stackedSeries;\r\n\t\t\t\tif (stackedSeries) {\r\n\t\t\t\t\tif (stackedSeries.isDisposed()) {\r\n\t\t\t\t\t\tthis.stackedSeries = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tstackedSeries.processValues(false);\r\n\t\t\t\t\t}\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\r\n\t\tif (!working && this.stacked) {\r\n\t\t\tthis.processValues(true);\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\r\n\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\tif (this.visible && !this.isHiding && !this.isShowing) {\r\n\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t}\r\n\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t}\r\n\r\n\t\t\tlet point = this.showTooltipAtDataItem(dataItem);\r\n\r\n\t\t\tif (point) {\r\n\t\t\t\treturn point;\r\n\t\t\t}\r\n\r\n\t\t\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\tif (!this.tooltipText) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.hideTooltip();\r\n\t}\r\n\r\n\tprotected getAdjustedXLocation(dataItem: this[\"_dataItem\"], field: string) {\r\n\t\treturn dataItem.locations[field];\r\n\t}\r\n\r\n\tprotected getAdjustedYLocation(dataItem: this[\"_dataItem\"], field: string) {\r\n\t\treturn dataItem.locations[field];\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\r\n\t\tlet cursor = this.chart.cursor;\r\n\t\tif(cursor && cursor.hideSeriesTooltipsOnSelection && cursor.selection.visible && cursor.downPoint){\r\n\t\t\tthis.hideTooltip();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.returnBulletDefaultState(dataItem);\r\n\t\tif (dataItem && dataItem.visible) {\r\n\t\t\tthis.updateLegendValue(dataItem);\r\n\t\t\tif (this.cursorTooltipEnabled) {\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, this.getAdjustedXLocation(dataItem, tooltipXField), this.getAdjustedYLocation(dataItem, 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\tif (this.cursorHoverEnabled) {\r\n\t\t\t\t\t\t\tfor (let sprite of dataItem.sprites) {\r\n\t\t\t\t\t\t\t\tif (!sprite.parent.visible || sprite.isHidden || sprite.__disabled || sprite.disabled || sprite.isHiding) {\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tsprite.isHover = true;\r\n\t\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\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\telse {\r\n\t\t\tthis.updateLegendValue(dataItem, true);\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 sprite of this._prevTooltipDataItem.sprites) {\r\n\t\t\t\tif (!sprite.isDisposed()) {\r\n\t\t\t\t\tsprite.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\tprotected shouldCreateBullet(dataItem: this[\"_dataItem\"], bulletTemplate: Bullet): boolean {\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bulletTemplate.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 = bulletTemplate.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\treturn false;\r\n\t\t}\r\n\r\n\t\tif (bulletTemplate.disabled) {\r\n\t\t\tlet disabledField = bulletTemplate.propertyFields.disabled;\r\n\t\t\tlet dataContext = dataItem.dataContext;\r\n\t\t\tif (dataContext && dataContext[disabledField] === false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/*\r\n\t\tpublic positionBullet(bullet: Bullet) {\r\n\t\t\tsuper.positionBullet(bullet);\r\n\t\r\n\t\t\tlet dataItem:XYSeriesDataItem = bullet.dataItem;\r\n\t\r\n\t\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\t\tlet xField: string = bullet.xField;\r\n\t\t\tif (!$type.hasValue(xField)) {\r\n\t\t\t\txField = this.xField;\r\n\t\t\t}\r\n\t\r\n\t\t\tlet yField: string = bullet.yField;\r\n\t\t\tif (!$type.hasValue(yField)) {\r\n\t\t\t\tyField = this.yField;\r\n\t\t\t}\r\n\t\r\n\t\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\t\r\n\t\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\t\tif (point) {\r\n\t\t\t\t\tlet xOpenField = this.xOpenField;\r\n\t\t\t\t\tlet yOpenField = this.yOpenField;\r\n\t\r\n\t\t\t\t\tlet xAxis = this.xAxis;\r\n\t\t\t\t\tlet yAxis = this.yAxis;\r\n\t\t\t\t\tlet positionX:number;\r\n\t\t\t\t\tlet positionY:number;\r\n\t\t\t\r\n\t\t\t\t\tif((xAxis instanceof DateAxis && (xOpenField && xOpenField != xField)) || xAxis instanceof ValueAxis){\r\n\t\r\n\t\t\t\t\t\tif(!$type.isNumber(bulletLocationX)){\r\n\t\t\t\t\t\t\tbulletLocationX = 0;\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\tlet openValue:number;\r\n\t\t\t\t\t\tlet closeValue:number = dataItem.getWorkingValue(xField);\r\n\t\r\n\t\t\t\t\t\tif(!xOpenField){\r\n\t\t\t\t\t\t\topenValue = xAxis.min;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\topenValue = dataItem.getWorkingValue(xOpenField);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlet middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n\t\r\n\t\t\t\t\t\tpositionX = xAxis.valueToPosition(middleValue);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if(xAxis instanceof CategoryAxis){\r\n\t\t\t\t\t\tpositionX = xAxis.categoryToPosition((dataItem)[xField], bulletLocationX);\r\n\t\t\t\t\t}\t\r\n\t\r\n\t\t\t\t\tif((yAxis instanceof DateAxis && (yOpenField && yOpenField != yField)) || yAxis instanceof ValueAxis){\r\n\t\r\n\t\t\t\t\t\tif(!$type.isNumber(bulletLocationY)){\r\n\t\t\t\t\t\t\tbulletLocationY = 0;\r\n\t\t\t\t\t\t}\t\t\t\t\t\r\n\t\r\n\t\t\t\t\t\tlet openValue:number;\r\n\t\t\t\t\t\tlet closeValue:number = dataItem.getWorkingValue(yField);\r\n\t\r\n\t\t\t\t\t\tif(!yOpenField){\r\n\t\t\t\t\t\t\topenValue = yAxis.min;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\topenValue = dataItem.getWorkingValue(yOpenField);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlet middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n\t\r\n\t\t\t\t\t\tpositionY = yAxis.valueToPosition(middleValue);\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\telse if(yAxis instanceof CategoryAxis){\r\n\t\t\t\t\t\tpositionY = yAxis.categoryToPosition((dataItem)[yField], bulletLocationY);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tbullet.visible = true;\r\n\t\r\n\t\t\t\t\tthis.positionBulletReal(bullet, positionX, positionY);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tbullet.visible = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\t\r\n\t\r\n\t\tprotected positionBulletReal(bullet:Sprite, positionX:number, positionY:number){\r\n\t\t\tbullet.x = this.xAxis.renderer.positionToPoint(positionX).x;\r\n\t\t\tbullet.y = this.yAxis.renderer.positionToPoint(positionY).y;\r\n\t\t}\r\n\t*/\r\n\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) {\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\r\n\t\t\t\tbullet.visible = true;\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 * Note: proper stacking is only possible if series have the same number\r\n\t * of data items. To ensure this, don't set data directly on series\r\n\t * but do this on chart instead.\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? In order this to work, you should set snapTooltip = false on the series baseAxis.\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 < xAxis.baseValue && xAxis.maxZoomed > xAxis.baseValue) || this.stackedSeries) {\r\n\t\t\t\tvalue = xAxis.baseValue;\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 < yAxis.baseValue && yAxis.maxZoomed > yAxis.baseValue) || this.stackedSeries) {\r\n\t\t\t\tvalue = yAxis.baseValue;\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\tif (!field) {\r\n\t\t\t\treturn;\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\t\t\t\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\t\t\t\t\t\tlet prevRealValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\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 && prevRealValue >= 0) || (value < 0 && prevRealValue < 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 base axes\r\n\t\t\tif ($type.hasValue(config.baseAxis) && $type.isString(config.baseAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.baseAxis)) {\r\n\t\t\t\t\tconfig.baseAxis = this.map.getKey(config.baseAxis);\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.baseAxis + \"\\\" found for `baseAxis`.\");\r\n\t\t\t\t\tdelete config.baseAxis;\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\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 * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param xKey Name of X data field\r\n\t * @param yKey Name of Y data field\r\n\t * @param locationX X location\r\n\t * @param locationY Y location\r\n\t * @param stackKeyX ?\r\n\t * @param stackKeyY ?\r\n\t * @returns Coordinates\r\n\t */\r\n\tpublic getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string): IPoint {\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, -100000, 100000); // 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, -100000, 100000); // 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\t/**\r\n\t * Indicates if series should apply hover state on bullets/columns/etc when\r\n\t * cursor is over the data item.\r\n\t *\r\n\t * If set to `true` (default) and chart cursor is enabled on th chart,\r\n\t * hovering over date/category will trigger hover states on related Series\r\n\t * items like bullets and columns.\r\n\t *\r\n\t * @default true\r\n\t * @since 4.2.2\r\n\t * @param value Hover enabled?\r\n\t */\r\n\tpublic set cursorHoverEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorHoverEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hover enabled?\r\n\t */\r\n\tpublic get cursorHoverEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorHoverEnabled\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series' values should be excluded when calculating totals.\r\n\t * \r\n\t * @default false\r\n\t * @since 4.4.9\r\n\t * @param value Exclude from totals?\r\n\t */\r\n\tpublic set excludeFromTotal(value: boolean) {\r\n\t\tthis.setPropertyValue(\"excludeFromTotal\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Exclude from totals?\r\n\t */\r\n\tpublic get excludeFromTotal(): boolean {\r\n\t\treturn this.getPropertyValue(\"excludeFromTotal\");\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 * 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 } 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 { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\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\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.labels.template.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\t\t\trenderer.minWidth = undefined;\r\n\t\t\trenderer.minHeight = undefined;\r\n\t\t\trenderer.padding(0, 0, 0, 0);\r\n\t\t\trenderer.chart = scrollbarChart;\r\n\t\t\trenderer.margin(0, 0, 0, 0);\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\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\tlet vAxis = xAxis;\r\n\t\t\t\tthis._disposers.push(vAxis.clonedFrom.events.on(\"extremeschanged\", () => {\r\n\t\t\t\t\tvAxis.min = vAxis.clonedFrom.min;\r\n\t\t\t\t\tvAxis.max = vAxis.clonedFrom.max - 1;\r\n\t\t\t\t}, undefined, false))\r\n\t\t\t}\r\n\t\t\telse if (xAxis instanceof ValueAxis) {\r\n\t\t\t\tlet vAxis = xAxis;\r\n\t\t\t\tthis._disposers.push(vAxis.clonedFrom.events.on(\"extremeschanged\", () => {\r\n\t\t\t\t\tvAxis.min = vAxis.clonedFrom.min;\r\n\t\t\t\t\tvAxis.max = vAxis.clonedFrom.max;\r\n\t\t\t\t}, undefined, false))\r\n\t\t\t}\r\n\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.scrollbarChart.xAxes.each((xAxis) => {\r\n\t\t\t\tif (xAxis.clonedFrom == sourceSeries.xAxis) {\r\n\t\t\t\t\tseries.xAxis = xAxis;\r\n\t\t\t\t}\r\n\t\t\t})\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.labels.template.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\t\t\trenderer.minWidth = undefined;\r\n\t\t\trenderer.minHeight = undefined;\r\n\t\t\trenderer.chart = scrollbarChart;\r\n\t\t\trenderer.padding(0, 0, 0, 0);\r\n\t\t\trenderer.margin(0, 0, 0, 0);\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\r\n\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\tlet vAxis = yAxis;\r\n\t\t\t\tthis._disposers.push(vAxis.clonedFrom.events.on(\"extremeschanged\", () => {\r\n\t\t\t\t\tvAxis.min = vAxis.clonedFrom.min;\r\n\t\t\t\t\tvAxis.max = vAxis.clonedFrom.max - 1;\r\n\t\t\t\t}))\r\n\t\t\t}\r\n\r\n\t\t\telse if (yAxis instanceof ValueAxis) {\r\n\t\t\t\tlet vAxis = yAxis;\r\n\t\t\t\tthis._disposers.push(vAxis.clonedFrom.events.on(\"extremeschanged\", () => {\r\n\t\t\t\t\tvAxis.min = vAxis.clonedFrom.min;\r\n\t\t\t\t\tvAxis.max = vAxis.clonedFrom.max;\r\n\t\t\t\t}))\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.scrollbarChart.yAxes.each((yAxis) => {\r\n\t\t\t\tif (yAxis.clonedFrom == sourceSeries.yAxis) {\r\n\t\t\t\t\tseries.yAxis = yAxis;\r\n\t\t\t\t}\r\n\t\t\t})\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, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\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, XYSeriesDataItem } 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, 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\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\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}\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\t/**\r\n\t * Holds a reference to the container axis bullets are drawn in.\r\n\t */\r\n\tpublic axisBulletsContainer: Container;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _seriesPoints: { point: IPoint, series: XYSeries }[] = [];\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\t// Create a container for bullets\r\n\t\tlet axisBulletsContainer: Container = this.plotContainer.createChild(Container);\r\n\t\taxisBulletsContainer.shouldClone = false;\r\n\t\taxisBulletsContainer.width = percent(100);\r\n\t\taxisBulletsContainer.height = percent(100);\r\n\t\taxisBulletsContainer.isMeasured = false;\r\n\t\taxisBulletsContainer.zIndex = 4;\r\n\t\taxisBulletsContainer.layout = \"none\";\r\n\t\tthis.axisBulletsContainer = axisBulletsContainer;\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 a re-initialization of this element.\r\n\t *\r\n\t * Will result in complete redrawing of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic reinit(): void {\r\n\t\tsuper.reinit();\r\n\r\n\t\tthis.series.each((series) => {\r\n\t\t\tseries.appeared = false;\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\tif (!axis.renderer) {\r\n\t\t\taxis.renderer = new this._axisRendererX();\r\n\t\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this, false);\r\n\t\t}\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.events.on(\"startendchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\t//axis.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\t\tif (!axis.renderer) {\r\n\t\t\taxis.renderer = new this._axisRendererY();\r\n\t\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this, false);\r\n\t\t}\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.events.on(\"startendchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\t//axis.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\trenderer.bulletsContainer.parent = this.axisBulletsContainer;\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\tthis.updateSeriesMasks();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * This is done because for some reason IE doesn't change mask if path of a\r\n\t * mask changes.\r\n\t */\r\n\tprotected updateSeriesMasks(): void {\r\n\t\tif ($utils.isIE()) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tlet mask = series.mainContainer.mask;\r\n\t\t\t\tseries.mainContainer.mask = undefined;\r\n\t\t\t\tseries.mainContainer.mask = mask;\r\n\t\t\t});\r\n\t\t}\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\r\n\t\t\tif (this.xAxes.length == 0 || this.yAxes.length == 0) {\r\n\t\t\t\tregistry.removeFromInvalidComponents(series);\r\n\t\t\t\tseries.dataInvalid = false;\r\n\t\t\t}\r\n\r\n\t\t\t$utils.used(series.xAxis); // this is enough to get axis, handled in getter\r\n\t\t\t$utils.used(series.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.shouldClone = false;\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\r\n\t\t\t\tif (this.tapToActivate) {\r\n\t\t\t\t\t// We need this in order to setup cursor properly\r\n\t\t\t\t\tthis.setTapToActivate(this.tapToActivate);\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 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 * 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\r\n\t\t\t\tlet xAxis = snapToSeries.xAxis;\r\n\t\t\t\tlet yAxis = snapToSeries.yAxis;\r\n\r\n\t\t\t\tif (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis) && yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n\t\t\t\t\tlet closestDataItem: XYSeriesDataItem;\r\n\t\t\t\t\tlet minDistance: number = Infinity;\r\n\r\n\t\t\t\t\tsnapToSeries.dataItems.each((dataItem) => {\r\n\r\n\t\t\t\t\t\t//let xxPosition = xAxis.toAxisPosition(xPosition);\r\n\t\t\t\t\t\t//let yyPosition = yAxis.toAxisPosition(xPosition);\r\n\r\n\t\t\t\t\t\tlet dxPosition = xAxis.toGlobalPosition(xAxis.getPositionX(dataItem, \"valueX\")) * xAxis.axisFullLength;\r\n\t\t\t\t\t\tlet dyPosition = yAxis.toGlobalPosition(yAxis.getPositionY(dataItem, \"valueY\")) * yAxis.axisFullLength;\r\n\r\n\t\t\t\t\t\tlet distance = Math.sqrt(Math.pow(xPosition * xAxis.axisFullLength - dxPosition, 2) + Math.pow(yPosition * yAxis.axisFullLength - dyPosition, 2));\r\n\r\n\t\t\t\t\t\tif (distance < minDistance) {\r\n\t\t\t\t\t\t\tminDistance = distance;\r\n\t\t\t\t\t\t\tclosestDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\tif (closestDataItem) {\r\n\t\t\t\t\t\tsnapToSeries.showTooltipAtDataItem(closestDataItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._seriesPoints = [];\r\n\t\t\tthis.showAxisTooltip(this.xAxes, xPosition, exceptAxis);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition, exceptAxis);\r\n\t\t\tthis.sortSeriesTooltips(this._seriesPoints);\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\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\t// TODO is this needed ?\r\n\t\t\t$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\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.shouldClone = false;\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.shouldClone = 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\r\n\t\t\trange = this.zoomAxes(this.xAxes, range);\r\n\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\t//let diff = range.end - range.start;\r\n\t\t\t\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\t\t\t\tlet diff = range.end - range.start;\r\n\t\t\t\t\t\t//range.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\r\n\t\t\t\t\t\tlet location = 0;\r\n\t\t\t\t\t\tif (range.end > 0.5) {\r\n\t\t\t\t\t\t\tlocation = 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trange.end = axis.roundPosition(range.end + 0.0001, location);\r\n\t\t\t\t\t\trange.start = range.end - diff;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\t\trange.end = axis.roundPosition(range.end + 0.0001, 0);\r\n\t\t\t\t\t}\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, rangeX.start + (rangeX.end - rangeX.start) * locationX - shiftStep * 0.05);\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, rangeX.start + (rangeX.end - rangeX.start) * locationX + shiftStep * 0.05);\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, rangeY.start + (rangeY.end - rangeY.start) * locationY - shiftStep * 0.05);\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, rangeY.start + (rangeY.end - rangeY.start) * locationY + shiftStep * 0.05);\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-specific 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 == \"cursor\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"cursor\") {\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\r\n\t\tsource.xAxes.each((axis) => {\r\n\t\t\tthis.xAxes.push(axis.clone());\r\n\t\t})\r\n\r\n\t\tsource.yAxes.each((axis) => {\r\n\t\t\tthis.yAxes.push(axis.clone());\r\n\t\t})\r\n\r\n\t\t//this.xAxes.copyFrom(source.xAxes);\r\n\t\t//this.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\t//this.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\r\n\t\tif (source.cursor) {\r\n\t\t\tthis.cursor = source.cursor.clone();\r\n\t\t}\r\n\r\n\t\tif (source.scrollbarX) {\r\n\t\t\tthis.scrollbarX = source.scrollbarX.clone();\r\n\t\t}\r\n\r\n\t\tif (source.scrollbarY) {\r\n\t\t\tthis.scrollbarY = source.scrollbarY.clone();\r\n\t\t}\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\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.addScrollbarData(this.scrollbarX, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.addScrollbarData(this.scrollbarY, removeCount);\r\n\t\t}\r\n\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected addScrollbarData(scrollbar: XYChartScrollbar, removeCount: number) {\r\n\t\tlet chart = scrollbar.scrollbarChart;\r\n\t\tchart._parseDataFrom = chart.data.length;\r\n\t\tchart.invalidateData();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected removeScrollbarData(scrollbar: XYChartScrollbar, removeCount: number) {\r\n\t\tlet chart = scrollbar.scrollbarChart;\r\n\t\tif ($type.isNumber(removeCount)) {\r\n\t\t\twhile (removeCount > 0) {\r\n\t\t\t\tlet dataItem = this.dataItems.getIndex(0);\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchart.dataItems.remove(dataItem);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tchart.dataUsers.each((dataUser) => {\r\n\t\t\t\t\tlet dataItem = dataUser.dataItems.getIndex(0);\r\n\t\t\t\t\tif (dataItem) {\r\n\t\t\t\t\t\tdataUser.dataItems.remove(dataItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tchart._parseDataFrom--;\r\n\r\n\t\t\t\tremoveCount--;\r\n\t\t\t}\r\n\r\n\t\t\tchart.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes elements from the beginning of data\r\n\t *\r\n\t * @param count number of elements to remove\r\n\t */\r\n\tpublic removeData(count: $type.Optional) {\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.removeScrollbarData(this.scrollbarX, count);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.removeScrollbarData(this.scrollbarY, count);\r\n\t\t}\r\n\r\n\t\tsuper.removeData(count);\r\n\t}\r\n\r\n\t/**\r\n\t * @param value Tap to activate?\r\n\t */\r\n\tprotected setTapToActivate(value: boolean): void {\r\n\t\tsuper.setTapToActivate(value);\r\n\t\tif (this.cursor) {\r\n\t\t\tthis.cursor.interactions.isTouchProtected = value;\r\n\t\t\tthis.plotContainer.interactions.isTouchProtected = value;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleTapToActivate(): void {\r\n\t\tsuper.handleTapToActivate();\r\n\t\tif (this.cursor) {\r\n\t\t\tthis.cursor.interactions.isTouchProtected = false;\r\n\t\t\tthis.plotContainer.interactions.isTouchProtected = false;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleTapToActivateDeactivation(): void {\r\n\t\tsuper.handleTapToActivateDeactivation();\r\n\t\tif (this.cursor) {\r\n\t\t\tthis.cursor.interactions.isTouchProtected = true;\r\n\t\t\tthis.plotContainer.interactions.isTouchProtected = true;\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\r\n/**\r\n * Add default responsive rules\r\n */\r\n\r\n/**\r\n * Remove horizontal scrollbar on narrow charts.\r\n */\r\ndefaultRules.push({\r\n\trelevant: ResponsiveBreakpoints.maybeXS,\r\n\tstate: function(target, stateId) {\r\n\t\tif (target instanceof XYChart && target.scrollbarX) {\r\n\t\t\tlet state = target.states.create(stateId);\r\n\t\t\tlet sbstate = target.scrollbarX.states.create(stateId);\r\n\t\t\tsbstate.properties.disabled = true;\r\n\t\t\treturn state;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n});\r\n\r\n/**\r\n * Remove vertical scrollbar on short charts.\r\n */\r\ndefaultRules.push({\r\n\trelevant: ResponsiveBreakpoints.maybeXS,\r\n\tstate: function(target, stateId) {\r\n\t\tif (target instanceof XYChart && target.scrollbarY) {\r\n\t\t\tlet state = target.states.create(stateId);\r\n\t\t\tlet sbstate = target.scrollbarY.states.create(stateId);\r\n\t\t\tsbstate.properties.disabled = true;\r\n\t\t\treturn state;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n});\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, 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 { color } from \"../../core/utils/Color\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.fill = color();\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.events.copyFrom(source.strokeSprite.events);\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.events.copyFrom(source.fillSprite.events);\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, visualProperties } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Axis, AxisDataItem } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\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 $array from \"../../core/utils/Array\";\r\nimport { LegendDataItem } from \"../Legend\";\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 [[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\t/**\r\n\t * If `connect = false` and distance between two data points is bigger\r\n\t * than `baseInterval * autoGapCount`, a line will break automatically.\r\n\t *\r\n\t * @default 1.1\r\n\t */\r\n\tautoGapCount?: number;\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.autoGapCount = 1.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\t\t// this makes data items animate when added\r\n\r\n\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\tif (this.appeared && this.visible) {\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\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX); // 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\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY); // 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\telse {\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (xAxis instanceof CategoryAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"categoryX\", dataItem.locations.categoryX);\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\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (yAxis instanceof CategoryAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"categoryY\", dataItem.locations.categoryY);\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\"], notRange?:boolean) {\r\n\t\tsuper.updateLegendValue(dataItem, notRange);\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.openSegmentWrapper(this._adjustedStartIndex);\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\tthis.openSegmentWrapper(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\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(dataItem){\r\n\t\t\t\t\t\tif ($type.hasValue(dataItem.properties[property])) {\r\n\t\t\t\t\t\t\tif (adjustedIndex > i) {\r\n\t\t\t\t\t\t\t\tadjustedIndex = i;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\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\treturn adjustedIndex;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Wraps openSegment call with iterative solution to prevent stack overflow\r\n\t *\r\n\t * @param openIndex Index\r\n\t * @param axisRange Range\r\n\t */\r\n\tprotected openSegmentWrapper(openIndex: number, axisRange?: AxisDataItem): void {\r\n\t\tlet params = {\r\n\t\t\t\"index\": openIndex,\r\n\t\t\t\"axisRange\": axisRange\r\n\t\t};\r\n\t\tdo {\r\n\t\t\tparams = this.openSegment(params.index, params.axisRange);\r\n\t\t} while (params)\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): { \"index\": number, \"axisRange\": AxisDataItem } {\r\n\t\tlet addToClose = false;\r\n\t\tlet points: IPoint[] = [];\r\n\t\topenIndex = Math.min(openIndex, this.dataItems.length);\r\n\t\tlet endIndex: number = Math.min(this._workingEndIndex, this.dataItems.length);\r\n\t\tthis._workingEndIndex = Math.min(this._workingEndIndex, this.dataItems.length);\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\tlet connect: boolean = this.connect;\r\n\t\tlet valuesFound:boolean = false; // some flag to avoid multiple closes if no values found\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\tvaluesFound = true;\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\t// stop cycle\r\n\t\t\t\t\tif (!connect && valuesFound) {\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 (this.baseAxis instanceof DateAxis) {\r\n\t\t\t\tlet next = this.dataItems.getIndex(i + 1)\r\n\t\t\t\tif (next && this.baseAxis.makeGap(next, dataItem)) {\r\n\t\t\t\t\taddToClose = true;\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 (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.closeSegment(segment, points, openIndex, closeIndex, axisRange, addToClose);\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, add?: boolean) {\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\t\t\tif (count > 0) {\r\n\t\t\t\tif (baseAxis == xAxis) {\r\n\t\t\t\t\tclosePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n\t\t\t\t\tclosePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n\t\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n\t\t\t\t}\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 (add) {\r\n\t\t\tcloseIndex++;\r\n\t\t}\r\n\r\n\t\tif (closeIndex < this._workingEndIndex - 1) {\r\n\t\t\treturn { \"index\": closeIndex, \"axisRange\": axisRange };\r\n\t\t} else {\r\n\t\t\treturn null;\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\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\r\n\t\t\tif ((bullet instanceof Bullet) && !bullet.copyToLegendMarker) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tlet hasLabels: boolean = false;\r\n\r\n\t\t\tif (bullet instanceof Container) {\r\n\t\t\t\t// do not copy bullets with labels\r\n\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\t\t\t}\r\n\r\n\t\t\tif (!hasLabels) {\r\n\t\t\t\tlet clone: Sprite = bullet.clone();\r\n\t\t\t\tclone.parent = marker;\r\n\t\t\t\tclone.isMeasured = true;\r\n\t\t\t\tclone.tooltipText = undefined;\r\n\t\t\t\tclone.x = w / 2;\r\n\t\t\t\tif (this.fillOpacity > 0) {\r\n\t\t\t\t\tclone.y = 0;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tclone.y = h / 2;\r\n\t\t\t\t}\r\n\t\t\t\tclone.visible = true;\r\n\r\n\t\t\t\t// otherwise will not transit to color after hiding\r\n\t\t\t\tif (!$type.hasValue(clone.fill)) {\r\n\t\t\t\t\tclone.fill = this.fill;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!$type.hasValue(clone.stroke)) {\r\n\t\t\t\t\tclone.stroke = this.stroke;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\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\t/**\r\n\t * If `connect = false` and distance between two data points is bigger\r\n\t * than `baseInterval * autoGapCount`, a line will break automatically.\r\n\t *\r\n\t * @since 4.2.4\r\n\t * @param value Gap count\r\n\t */\r\n\tpublic set autoGapCount(value: number) {\r\n\t\tthis.setPropertyValue(\"autoGapCount\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Gap count\r\n\t */\r\n\tpublic get autoGapCount(): number {\r\n\t\treturn this.getPropertyValue(\"autoGapCount\");\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[\"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 { 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//import { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\n//import { Sprite } from \"../../core/Sprite\";\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 * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param xKey Name of X data field\r\n\t * @param yKey Name of Y data field\r\n\t * @param locationX X location\r\n\t * @param locationY Y location\r\n\t * @param stackKeyX ?\r\n\t * @param stackKeyY ?\r\n\t * @returns Coordinates\r\n\t */\r\n\tpublic 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\t/*\r\n\t\tprotected positionBulletReal(bullet:Sprite, positionX:number, positionY:number){\r\n\t\t\t\r\n\t\t\tlet rendererX:AxisRendererCircular = this.xAxis.renderer;\r\n\t\t\tlet rendererY:AxisRendererRadial = this.yAxis.renderer;\r\n\t\t\t\r\n\t\t\tlet angle = rendererX.positionToAngle(positionX);\r\n\t\t\tlet radius = rendererY.positionToCoordinate(positionY);\r\n\t\r\n\t\t\tif(angle < this.chart.startAngle || angle > this.chart.endAngle){\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\r\n\t\t\tbullet.x = $math.cos(angle) * radius;\r\n\t\t\tbullet.y = $math.sin(angle) * radius;\r\n\t\t}\t*/\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"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 { AxisFill, IAxisFillProperties, IAxisFillAdapters, IAxisFillEvents } from \"./AxisFill\";\r\nimport { Axis } from \"./Axis\";\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\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\r\n\t\tif(this.__disabled || this.disabled){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\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 * 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 { Grid, IGridProperties, IGridAdapters, IGridEvents } from \"./Grid\";\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","/**\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 { 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\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisBullet } from \"./AxisBullet\";\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 ($type.isNumber(point.x) && $type.isNumber(point.y) && 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\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 axis bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet AxisBullet element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateBullet(bullet: Sprite, position: number, endPosition: number): void {\r\n\t\tlet location = 0.5;\r\n\t\tif (bullet instanceof AxisBullet) {\r\n\t\t\tlocation = bullet.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\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\t\t\r\n\r\n\t\tpoint = { x: radius * $math.cos(angle), y: radius * $math.sin(angle) }\r\n\r\n\t\tthis.positionItem(bullet, point);\r\n\r\n\t\tthis.toggleVisibility(bullet, 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 * 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 { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\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 $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisBullet } from \"./AxisBullet\";\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\r\n\t/**\r\n\t * Updates and positions axis bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet AxisBullet element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateBullet(bullet: Sprite, position: number, endPosition: number): void {\r\n\t\tlet location = 0.5;\r\n\t\tif (bullet instanceof AxisBullet) {\r\n\t\t\tlocation = bullet.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\t\t\r\n\t\tthis.positionItem(bullet, point);\r\n\r\n\t\tthis.toggleVisibility(bullet, 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 { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\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\t\tthis.axisBulletsContainer = 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 * 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 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 { 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 { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { Ordering } from \"../../core/utils/Order\";\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\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 == \"hands\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"hands\") {\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}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { PieChart3D } from \"../types/PieChart3D\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\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\tconst 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 { 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 { FunnelSeries } from \"../series/FunnelSeries\";\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 [[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 * FlowDiagramNode 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 { Sprite, AMEvent, visualProperties, ISpriteEvents } from \"../../core/Sprite\";\r\nimport { FlowDiagram, FlowDiagramDataItem } from \"../types/FlowDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\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 { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport { LegendSettings, LegendDataItem } from \"../Legend\";\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 [[FlowDiagramNode]].\r\n */\r\nexport interface IFlowDiagramNodeProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Name of the node.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * Sum of all incomming+outgoing link values\r\n\t */\r\n\ttotal?: number;\r\n\r\n\t/**\r\n\t * Sum of all incoming link values\r\n\t */\r\n\ttotalIncoming?: number;\r\n\r\n\t/**\r\n\t * Sum of all outgoing link values\r\n\t */\r\n\ttotalOutgoing?: number;\r\n\r\n\t/**\r\n\t * Node's color.\r\n\t */\r\n\tcolor?: Color;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagramNode]].\r\n */\r\nexport interface IFlowDiagramNodeEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagramNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramNodeAdapters extends IContainerAdapters, IFlowDiagramNodeProperties { }\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 Flow Diagram.\r\n *\r\n * A Flow node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[FlowLink]] elements.\r\n *\r\n * @see {@link IFlowDiagramNodeEvents} for a list of available events\r\n * @see {@link IFlowDiagramNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagramNode extends Container {\r\n\r\n\t/**\r\n\t * total ajusted taken in mind chart.minNodeSize\r\n\t */\r\n\tpublic adjustedTotal: number;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramNodeEvents;\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: FlowDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[FlowDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * Settings for the appearance of the related legend items.\r\n\t */\r\n\tpublic legendSettings: LegendSettings = new LegendSettings();\r\n\r\n\r\n\t/**\r\n\t * A reference to the legend data item related to this node.\r\n\t */\r\n\tprotected _legendDataItem: LegendDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagramNode\";\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tnew InterfaceColorSet();\r\n\r\n\t\tthis.draggable = true;\r\n\t\tthis.inert = true;\r\n\r\n\t\tthis.setStateOnChildren = true;\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.invalidateLinks, this, false);\r\n\t\tthis.events.on(\"sizechanged\", this.invalidateLinks, this, false);\r\n\t\t//this.events.on(\"hit\", this.handleHit, this, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic handleHit(event: AMEvent[\"hit\"]) {\r\n\t\tif (this.isHidden || this.isHiding) {\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows hidden node.\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\t\tlet animation = super.show(duration);\r\n\r\n\t\tthis.outgoingDataItems.each(function(dataItem) {\r\n\t\t\tif (!dataItem.toNode || (dataItem.toNode && !dataItem.toNode.isHidden)) {\r\n\t\t\t\tdataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.incomingDataItems.each(function(dataItem) {\r\n\t\t\tif (!dataItem.fromNode || (dataItem.fromNode && !dataItem.fromNode.isHidden)) {\r\n\t\t\t\tdataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides node.\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\t\tlet animation = super.hide(duration);\r\n\r\n\t\tthis.outgoingDataItems.each(function(dataItem) {\r\n\t\t\tdataItem.setWorkingValue(\"value\", 0, duration);\r\n\t\t})\r\n\r\n\t\tthis.incomingDataItems.each(function(dataItem) {\r\n\t\t\tdataItem.setWorkingValue(\"value\", 0, duration);\r\n\t\t})\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Marks node as invalid, for redrawal in the next update cycle.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif(!this.isDisposed()){\r\n\t\t\tsuper.validate();\r\n\t\t\tthis.invalidateLinks();\r\n\t\t}\r\n\t}\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\r\n\t\tthis.outgoingDataItems.each((dataItem) => {\r\n\t\t\tlet link = dataItem.link;\r\n\t\t\tif (link.colorMode == \"fromNode\") {\r\n\t\t\t\tlink.fill = link.dataItem.fromNode.color;\r\n\t\t\t}\r\n\r\n\t\t\tif (link.colorMode == \"gradient\") {\r\n\r\n\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\tlink.stroke = link.gradient;\r\n\r\n\t\t\t\tlet stop = link.gradient.stops.getIndex(0);\r\n\r\n\t\t\t\tif (stop) {\r\n\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\tlink.gradient.validate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.incomingDataItems.each((dataItem) => {\r\n\t\t\tlet link = dataItem.link;\r\n\t\t\tif (link.colorMode == \"toNode\") {\r\n\t\t\t\tlink.fill = link.dataItem.toNode.color;\r\n\t\t\t}\r\n\r\n\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\tlink.stroke = link.gradient;\r\n\r\n\t\t\t\tlet stop = link.gradient.stops.getIndex(1);\r\n\r\n\t\t\t\tif (stop) {\r\n\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\tlink.gradient.validate();\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 * List of incoming items (links).\r\n\t *\r\n\t * @readonly\r\n\t * @return Incoming items\r\n\t */\r\n\tpublic get incomingDataItems(): List {\r\n\t\tif (!this._incomingDataItems) {\r\n\t\t\tlet incomingDataItems = new List();\r\n\t\t\tincomingDataItems.events.on(\"inserted\", () => {\r\n\t\t\t\tif (this.chart.sortBy == \"name\") {\r\n\t\t\t\t\tthis._incomingSorted = $iter.sort(this._incomingDataItems.iterator(), (x, y) => $string.order(x.fromName, y.fromName));\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.chart.sortBy == \"value\") {\r\n\t\t\t\t\tthis._incomingSorted = $iter.sort(this._incomingDataItems.iterator(), (x, y) => $order.reverse($number.order(x.value, y.value)));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._incomingSorted = this._incomingDataItems.iterator();\r\n\t\t\t\t}\r\n\t\t\t}, undefined, false);\r\n\t\t\tthis._incomingDataItems = incomingDataItems;\r\n\t\t}\r\n\t\treturn this._incomingDataItems;\r\n\t}\r\n\r\n\t/**\r\n\t * List of outgoing items (links).\r\n\t *\r\n\t * @readonly\r\n\t * @return Outgoing items\r\n\t */\r\n\tpublic get outgoingDataItems(): List {\r\n\t\tif (!this._outgoingDataItems) {\r\n\t\t\tlet outgoingDataItems = new List();\r\n\t\t\toutgoingDataItems.events.on(\"inserted\", () => {\r\n\t\t\t\tif (this.chart.sortBy == \"name\") {\r\n\t\t\t\t\tthis._outgoingSorted = $iter.sort(this._outgoingDataItems.iterator(), (x, y) => $string.order(x.fromName, y.fromName));\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.chart.sortBy == \"value\") {\r\n\t\t\t\t\tthis._outgoingSorted = $iter.sort(this._outgoingDataItems.iterator(), (x, y) => $order.reverse($number.order(x.value, y.value)));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._outgoingSorted = this._outgoingDataItems.iterator();\r\n\t\t\t\t}\r\n\r\n\t\t\t}, undefined, false);\r\n\t\t\tthis._outgoingDataItems = outgoingDataItems;\r\n\t\t}\r\n\t\treturn this._outgoingDataItems;\r\n\t}\r\n\r\n\t/**\r\n\t * A name of the node.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setPropertyValue(\"name\", value, true);\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.getPropertyValue(\"name\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all incoming+outgoing link values\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set total(value: number) {\r\n\t\tthis.setPropertyValue(\"total\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get total(): number {\r\n\t\treturn this.getPropertyValue(\"total\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all incomming link values.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set totalIncoming(value: number) {\r\n\t\tthis.setPropertyValue(\"totalIncoming\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get totalIncoming(): number {\r\n\t\treturn this.getPropertyValue(\"totalIncoming\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all outgoing link values.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set totalOutgoing(value: number) {\r\n\t\tthis.setPropertyValue(\"totalOutgoing\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get totalOutgoing(): number {\r\n\t\treturn this.getPropertyValue(\"totalOutgoing\");\r\n\t}\r\n\r\n\t/**\r\n\t * Node's color.\r\n\t *\r\n\t * @param value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setColorProperty(\"color\", value);\r\n\t\tif (this._background) {\r\n\t\t\tthis._background.fill = value;\r\n\t\t}\r\n\t\tthis.fill = 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\treturn this.getPropertyValue(\"color\");\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\t\tcolumn.stroke = this.fill;\r\n\r\n\t\tcolumn.copyFrom(this);\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\t/**\r\n\t * Legend data item that corresponds to this series.\r\n\t *\r\n\t * @param value Data item\r\n\t */\r\n\tpublic set legendDataItem(value: LegendDataItem) {\r\n\t\tthis._legendDataItem = value;\r\n\t\tthis._legendDataItem.itemContainer.deepInvalidate();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Data item\r\n\t */\r\n\tpublic get legendDataItem(): LegendDataItem {\r\n\t\treturn this._legendDataItem;\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[\"FlowDiagramNode\"] = FlowDiagramNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FlowDiagramNode.ts","/**\r\n * FlowDiagramLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { FlowDiagramDataItem } from \"../types/FlowDiagram\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { RadialGradient } from \"../../core/rendering/fills/RadialGradient\";\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, ListDisposer } from \"../../core/utils/List\";\r\nimport { Polyline } from \"../../core/elements/Polyline\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\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 [[FlowDiagramLink]].\r\n */\r\nexport interface IFlowDiagramLinkProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * [tension description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartX?: number;\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartY?: number;\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendX?: number;\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendY?: number;\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tlinkWidth?: number;\r\n\r\n\t/**\r\n\t * [startAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * [endAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Should link be filled with a solid color, color of from node, color of toNode or gradient between node colors.\r\n\t */\r\n\tcolorMode?: \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\";\r\n\r\n\t/**\r\n\t * [controlPointDistance description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tcontrolPointDistance?: number;\r\n\r\n\t/**\r\n\t * [maskBullets description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * [tooltipLocation description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttooltipLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagramLink]].\r\n */\r\nexport interface IFlowDiagramLinkEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagramLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramLinkAdapters extends IContainerAdapters, IFlowDiagramLinkProperties { }\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 * Flow Diagram.\r\n *\r\n * @see {@link IFlowDiagramLinkEvents} for a list of available events\r\n * @see {@link IFlowDiagramLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagramLink extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramLinkEvents;\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: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * A gradiend instance that is used to provided colored gradient fills for\r\n\t * the Flow link.\r\n\t */\r\n\tprotected _gradient: LinearGradient;\r\n\r\n\r\n\t/**\r\n\t * List of bullets\r\n\t * @ignore\r\n\t */\r\n\tprotected _bullets: ListTemplate;\r\n\r\n\t/**\r\n\t * Link sprite\r\n\t */\r\n\tpublic link: Sprite;\r\n\r\n\t/**\r\n\t * Bullets mask spite\r\n */\r\n\tprotected _bulletsMask: Sprite;\r\n\r\n\t/**\r\n\t * Bullets container\r\n */\r\n\tprotected _bulletsContainer: Container;\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: Line | Polyline;\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 = \"FlowDiagramLink\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.maskBullets = false;\r\n\r\n\t\tthis.colorMode = \"fromNode\";\r\n\r\n\t\tthis.layout = \"none\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startAngle = 0;\r\n\t\tthis.endAngle = 0;\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\r\n\t\t// this is very important, otherwise the container will be shifted\r\n\t\tthis.verticalCenter = \"none\";\r\n\t\tthis.horizontalCenter = \"none\";\r\n\r\n\t\tthis.tooltipText = \"{fromName}→{toName}:{value.value}\";\r\n\t\tthis.tooltipLocation = 0.5;\r\n\r\n\t\tthis.link = this.createChild(Sprite);\r\n\t\tthis.link.shouldClone = false;\r\n\t\tthis.link.setElement(this.paper.add(\"path\"));\r\n\t\tthis.link.isMeasured = false;\r\n\t\tthis.fillOpacity = 0.2;\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Positions bullets\r\n\t * @ignore\r\n\t */\r\n\tprotected positionBullets() {\r\n\t\t$iter.each(this.bullets.iterator(), (bullet) => {\r\n\t\t\tbullet.parent = this.bulletsContainer;\r\n\r\n\t\t\tbullet.maxWidth = this.maxWidth;\r\n\t\t\tbullet.maxHeight = this.maxHeight;\r\n\r\n\t\t\tthis.positionBullet(bullet);\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Bullets container\r\n */\r\n\tpublic get bulletsContainer(){\r\n\t\tif(!this._bulletsContainer){\r\n\t\t\tlet bulletsContainer = this.createChild(Container);\r\n\t\t\tbulletsContainer.shouldClone = false;\r\n\t\t\tbulletsContainer.layout = \"none\";\r\n\t\t\tthis._bulletsContainer = bulletsContainer;\r\n\t\t}\r\n\t\treturn this._bulletsContainer;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Bullets mask sprite\r\n */\r\n\tpublic get bulletsMask(){\r\n\t\tif(!this._bulletsMask){\r\n\t\t\tlet bulletsMask = this.createChild(Sprite);\r\n\t\t\tbulletsMask.shouldClone = false;\r\n\t\t\tbulletsMask.setElement(this.paper.add(\"path\"));\r\n\t\t\tbulletsMask.isMeasured = false;\r\n\t\t\tthis._bulletsMask = bulletsMask;\r\n\t\t}\r\n\t\treturn this._bulletsMask;\r\n\t}\r\n\r\n\t/**\r\n\t * Positions bullets at relative bullet.locationX position on the link.\r\n\t * @ignore\r\n\t */\r\n\tprotected positionBullet(bullet: Bullet) {\r\n\r\n\t\tlet location = bullet.locationX;\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = bullet.locationY;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\t\tlet point = this.middleLine.positionToPoint(location);\r\n\r\n\t\tbullet.moveTo(point);\r\n\r\n\t\tlet rotationField = bullet.propertyFields.rotation;\r\n\t\tlet angle: number;\r\n\t\tif (bullet.dataItem) {\r\n\t\t\tlet dataContext: any = bullet.dataItem.dataContext;\r\n\t\t\tangle = dataContext[rotationField];\r\n\t\t}\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = point.angle;\r\n\t\t}\r\n\r\n\t\tbullet.rotation = angle;\r\n\t}\r\n\r\n\t/**\r\n\t * [startAngle description]\r\n\t *\r\n\t * @todo Description\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 * [endAngle description]\r\n\t *\r\n\t * @todo Description\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\t/**\r\n\t * Should link be filled with a solid color, color of from node, color of toNode or gradient between node colors.\r\n\t * Some of the links, like ChordLink does not support gradiens well.\r\n\t *\r\n\t * @param value Fill mode\r\n\t */\r\n\tpublic set colorMode(value: \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\") {\r\n\t\tif (value == \"gradient\") {\r\n\t\t\tlet color = this.fill;\r\n\r\n\t\t\tthis.gradient.stops.clear();\r\n\t\t\tif(color instanceof Color){\r\n\t\t\t\tthis.gradient.addColor(color);\r\n\t\t\t\tthis.gradient.addColor(color);\r\n\t\t\t}\r\n\t\t\tthis.fill = this.gradient;\r\n\t\t\tthis.stroke = this.gradient;\r\n\t\t}\r\n\t\tthis.setPropertyValue(\"colorMode\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Fill mode\r\n\t */\r\n\tpublic get colorMode(): \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\" {\r\n\t\treturn this.getPropertyValue(\"colorMode\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Should link bullets be masked or not\r\n\t *\r\n\t * @param value\r\n\t * @default false;\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 bullets value\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 * Relative location of a tooltip.\r\n\t * @default 0.5\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set tooltipLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"tooltipLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Tooltip location value\r\n\t */\r\n\tpublic get tooltipLocation(): number {\r\n\t\treturn this.getPropertyValue(\"tooltipLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Adds color steps in the link gradient.\r\n\t *\r\n\t * @param value Fill option\r\n\t */\r\n\tprotected setFill(value: Color | Pattern | LinearGradient | RadialGradient) {\r\n\t\tsuper.setFill(value)\r\n\t\tlet gradient = this._gradient;\r\n\r\n\t\tif (gradient && value instanceof Color) {\r\n\t\t\tgradient.stops.clear();\r\n\t\t\tgradient.addColor(value);\r\n\t\t\tgradient.addColor(value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates bounding box based on element dimension settings.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic measureElement(): void {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * List of bullets\r\n\t *\r\n\t * @return [description]\r\n\t */\r\n\tpublic get bullets(): ListTemplate {\r\n\t\tif (!this._bullets) {\r\n\t\t\tthis._bullets = new ListTemplate(new Bullet());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._bullets));\r\n\t\t\tthis._disposers.push(this._bullets.template);\r\n\t\t\tthis._bullets.events.on(\"inserted\", (event) => {\r\n\t\t\t\tevent.newValue.events.on(\"propertychanged\", (event) => {\r\n\t\t\t\t\tif (event.property == \"locationX\" || event.property == \"locationY\") {\r\n\t\t\t\t\t\tthis.positionBullet(event.target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, undefined, false)\r\n\t\t\t}, undefined, false)\r\n\t\t}\r\n\t\treturn this._bullets;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties from another [[FlowDiagramLink]].\r\n\t *\r\n\t * @param source Source link\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.bullets.copyFrom(source.bullets);\r\n\t\tlet middleLine = this.middleLine;\r\n\t\tif(middleLine){\r\n\t\t\tif (middleLine instanceof Line && source.middleLine instanceof Line) {\r\n\t\t\t\tmiddleLine.copyFrom(source.middleLine);\r\n\t\t\t}\r\n\r\n\t\t\tif (middleLine instanceof Polyline && source.middleLine instanceof Polyline) {\r\n\t\t\t\tmiddleLine.copyFrom(source.middleLine);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.link.copyFrom(source.link);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Tooltip X (px)\r\n\t */\r\n\tgetTooltipX(): number {\r\n\t\tif (this.middleLine) {\r\n\t\t\treturn this.middleLine.positionToPoint(this.tooltipLocation).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Tooltip Y (px)\r\n\t */\r\n\tgetTooltipY(): number {\r\n\t\tif (this.middleLine) {\r\n\t\t\treturn this.middleLine.positionToPoint(this.tooltipLocation).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A gradiend instance that is used to provided colored gradient fills for\r\n\t * the Flow link.\r\n\t */\r\n\tpublic get gradient(){\r\n\t\tif(!this._gradient){\r\n\t\t\tthis._gradient = new LinearGradient();\r\n\t\t}\r\n\t\treturn this._gradient;\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[\"FlowDiagramLink\"] = FlowDiagramLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FlowDiagramLink.ts","/**\r\n * FlowDiagram 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 { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { FlowDiagramNode } from \"../elements/FlowDiagramNode\";\r\nimport { FlowDiagramLink } from \"../elements/FlowDiagramLink\";\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 * as $iter from \"../../core/utils/Iterator\";\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 { Disposer } from \"../../core/utils/Disposer\";\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 [[FlowDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class FlowDiagramDataItem extends ChartDataItem {\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!: FlowDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: FlowDiagramLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: FlowDiagramNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: FlowDiagramNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagramDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Source node's name.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set fromName(value: string) {\r\n\t\tthis.setProperty(\"fromName\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return name\r\n\t */\r\n\tpublic get fromName(): string {\r\n\t\treturn this.properties.fromName;\r\n\t}\r\n\r\n\t/**\r\n\t * Destination node's name.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set toName(value: string) {\r\n\t\tthis.setProperty(\"toName\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return name\r\n\t */\r\n\tpublic get toName(): string {\r\n\t\treturn this.properties.toName;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Node color\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", toColor(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\treturn this.properties.color;\r\n\t}\r\n\r\n\t/**\r\n\t * Link's value.\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\treturn this.values.value.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A visual element, representing link between the source and target nodes.\r\n\t *\r\n\t * Link's actual thickness will be determined by `value` of this link and\r\n\t * `value` of the source node.\r\n\t *\r\n\t * @readonly\r\n\t * @return Link element\r\n\t */\r\n\tpublic get link(): this[\"_link\"] {\r\n\t\tif (!this._link) {\r\n\t\t\tlet link = this.component.links.create();\r\n\t\t\tthis._link = link;\r\n\r\n\t\t\tthis.addSprite(link);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.links.removeValue(link);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\treturn this._link;\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 [[FlowDiagram]].\r\n */\r\nexport interface IFlowDiagramDataFields extends IChartDataFields {\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\t/**\r\n\t * Visibility of a node\r\n\t */\r\n\tvisible?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[FlowDiagram]]\r\n */\r\nexport interface IFlowDiagramProperties extends IChartProperties {\r\n\r\n\t/**\r\n\t * Padding for node square in pixels.\r\n\t */\r\n\tnodePadding?: number;\r\n\r\n\t/**\r\n\t * Sort nodes by name or value or do not sort a\r\n\t */\r\n\tsortBy?: \"none\" | \"name\" | \"value\";\r\n\r\n\t/**\r\n\t * Sometimes nodes can get very small if their value is little. With this setting you\r\n\t * can set min size of a node (this is relative value from the total size of all nodes)\r\n\t */\r\n\tminNodeSize: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagram]].\r\n */\r\nexport interface IFlowDiagramEvents extends IChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramAdapters extends IChartAdapters, IFlowDiagramProperties { }\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 * @see {@link IFlowDiagramEvents} for a list of available Events\r\n * @see {@link IFlowDiagramAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagram extends Chart {\r\n\r\n\t/**\r\n\t * A Color Set to use when applying/generating colors for each subsequent\r\n\t * node.\r\n\t */\r\n\tpublic colors: ColorSet = new ColorSet();\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IFlowDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramEvents;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:FlowDiagramNode;\r\n\r\n\r\n\t/**\r\n\t * A list of chart's FlowDiagram nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tprotected _nodes: DictionaryTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _link:FlowDiagramLink;\r\n\r\n\t/**\r\n\t * A list of FlowDiagram links connecting nodes.\r\n\t *\r\n\t * @param {ListTemplate}\r\n\t */\r\n\tprotected _links: ListTemplate;\r\n\r\n\t/**\r\n\t * A container that holds all of the link elements.\r\n\t */\r\n\tpublic linksContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds all of the node elements.\r\n\t */\r\n\tpublic nodesContainer: Container;\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, FlowDiagramNode]>;\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 = \"FlowDiagram\";\r\n\t\tthis.nodePadding = 20;\r\n\t\tthis.sortBy = \"none\";\r\n\t\tthis.sequencedInterpolation = true;\r\n\r\n\t\tthis.colors.step = 2;\r\n\t\tthis.minNodeSize = 0.02;\r\n\r\n\t\tlet linksContainer = this.chartContainer.createChild(Container);\r\n\t\tlinksContainer.shouldClone = false;\r\n\t\tlinksContainer.layout = \"none\";\r\n\t\tlinksContainer.isMeasured = false;\r\n\t\tthis.linksContainer = linksContainer;\r\n\r\n\t\tlet nodesContainer = this.chartContainer.createChild(Container);\r\n\t\tnodesContainer.shouldClone = false;\r\n\t\tnodesContainer.layout = \"none\";\r\n\t\tnodesContainer.isMeasured = false;\r\n\t\tthis.nodesContainer = nodesContainer;\r\n\r\n\t\t// this data item holds sums, averages, etc\r\n\t\tthis.dataItem = this.createDataItem();\r\n\t\tthis.dataItem.component = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\tpublic dispose(): void {\r\n\t\tsuper.dispose();\r\n\t\tthis.dataItem.dispose();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates chart's data, effectively causing the chart to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tif(this._parseDataFrom == 0){\r\n\t\t\tthis.nodes.clear();\r\n\t\t}\r\n\r\n\t\tthis.sortNodes();\r\n\r\n\t\tthis.colors.reset();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tlet sum = 0;\r\n\t\tlet count = 0;\r\n\t\tlet low: number;\r\n\t\tlet high: number;\r\n\r\n\t\t// build blocks\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tlet fromName = dataItem.fromName;\r\n\r\n\t\t\tif (fromName) {\r\n\t\t\t\tlet node = this.nodes.getKey(fromName);\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tnode = this.nodes.create(fromName);\r\n\t\t\t\t\tnode.name = fromName;\r\n\t\t\t\t\tnode.chart = this;\r\n\t\t\t\t\tnode.dataItem = dataItem;\r\n\t\t\t\t}\r\n\t\t\t\tdataItem.fromNode = node;\r\n\t\t\t\tdataItem.fromNode.outgoingDataItems.push(dataItem);\r\n\t\t\t}\r\n\t\t\tlet toName = dataItem.toName;\r\n\t\t\tif (toName) {\r\n\t\t\t\tlet node = this.nodes.getKey(toName);\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tnode = this.nodes.create(toName);\r\n\t\t\t\t\tnode.name = toName;\r\n\t\t\t\t\tnode.chart = this;\r\n\t\t\t\t\tnode.dataItem = dataItem;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataItem.toNode = node;\r\n\t\t\t\tdataItem.toNode.incomingDataItems.push(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\tlet strokeModifier = new LinearGradientModifier();\r\n\t\t\t\tstrokeModifier.opacities = [0, 1];\r\n\t\t\t\tdataItem.link.strokeModifier = strokeModifier;\r\n\t\t\t}\r\n\r\n\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\tlet fillModifier = new LinearGradientModifier();\r\n\t\t\t\tfillModifier.opacities = [1, 0];\r\n\t\t\t\tdataItem.link.strokeModifier = fillModifier;\r\n\t\t\t}\r\n\r\n\t\t\tlet value = dataItem.value;\r\n\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\tsum += value;\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif (low > value || !$type.isNumber(low)) {\r\n\t\t\t\t\tlow = value;\r\n\t\t\t\t}\r\n\t\t\t\tif (high < value || !$type.isNumber(high)) {\r\n\t\t\t\t\thigh = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet key = \"value\";\r\n\r\n\t\tthis.dataItem.setCalculatedValue(key, high, \"high\");\r\n\t\tthis.dataItem.setCalculatedValue(key, low, \"low\");\r\n\t\tthis.dataItem.setCalculatedValue(key, sum, \"sum\");\r\n\t\tthis.dataItem.setCalculatedValue(key, sum / count, \"average\");\r\n\t\tthis.dataItem.setCalculatedValue(key, count, \"count\");\r\n\r\n\r\n\t\t$iter.each(this.nodes.iterator(), (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\r\n\t\t\tif (node.fill instanceof Color) {\r\n\t\t\t\tnode.color = node.fill;\r\n\t\t\t}\r\n\r\n\t\t\tif (node.color == undefined) {\r\n\t\t\t\tnode.color = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (node.dataItem.color != undefined) {\r\n\t\t\t\tnode.color = node.dataItem.color;\r\n\t\t\t}\r\n\r\n\t\t\tif(!node.dataItem.visible){\r\n\t\t\t\tnode.hide(0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t});\r\n\r\n\t\tthis.sortNodes();\r\n\t\tthis.feedLegend();\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\tthis.invalidate();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sorts nodes by either their values or names, based on `sortBy` setting.\r\n\t */\r\n\tprotected sortNodes() {\r\n\t\tif (this.sortBy == \"name\") {\r\n\t\t\tthis._sorted = this.nodes.sortedIterator();\r\n\t\t}\r\n\t\telse if (this.sortBy == \"value\") {\r\n\t\t\tthis._sorted = $iter.sort(this.nodes.iterator(), (x, y) => $order.reverse($number.order(x[1].total, y[1].total)));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._sorted = this.nodes.iterator();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a cummulative value of the node.\r\n\t *\r\n\t * A node's value is determined by summing values of all of the incoming\r\n\t * links or all of the outgoing links, whichever results in bigger number.\r\n\t *\r\n\t * @param node Node value\r\n\t */\r\n\tprotected getNodeValue(node: FlowDiagramNode) {\r\n\r\n\t\t// todo: totalIncomming totalOutgoing, total\r\n\r\n\t\tlet incomingTotal = 0;\r\n\t\tlet outgoingTotal = 0;\r\n\r\n\t\t$iter.each(node.incomingDataItems.iterator(), (dataItem: FlowDiagramDataItem) => {\r\n\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\tif($type.isNumber(value)){\r\n\t\t\t\tincomingTotal += value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$iter.each(node.outgoingDataItems.iterator(), (dataItem: FlowDiagramDataItem) => {\r\n\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\tif($type.isNumber(value)){\r\n\t\t\t\toutgoingTotal += value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tnode.total = incomingTotal + outgoingTotal;\r\n\t\tnode.totalIncoming = incomingTotal;\r\n\t\tnode.totalOutgoing = outgoingTotal;\r\n\t};\r\n\r\n\t/**\r\n\t * Changes the sort type of the nodes.\r\n\t *\r\n\t * This will actually reshuffle nodes using nice animation.\r\n\t */\r\n\tprotected changeSorting() {\r\n\t\tthis.sortNodes();\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(\"Flow 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 FlowDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Padding for node square in pixels.\r\n\t *\r\n\t * Padding will add extra space around node's name label.\r\n\t *\r\n\t * @param value Padding (px)\r\n\t */\r\n\tpublic set nodePadding(value: number) {\r\n\t\tthis.setPropertyValue(\"nodePadding\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding (px)\r\n\t */\r\n\tpublic get nodePadding(): number {\r\n\t\treturn this.getPropertyValue(\"nodePadding\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sort nodes by \"name\" or \"value\" or do not sort at all. If not sorted, nodes will appear in the same order as they are in the data.\r\n\t * @default \"none\"\r\n\t * @param value Node sorting\r\n\t */\r\n\tpublic set sortBy(value: \"none\" | \"name\" | \"value\") {\r\n\t\tthis.setPropertyValue(\"sortBy\", value);\r\n\t\tthis.changeSorting();\r\n\t}\r\n\r\n\t/**\r\n\t * @returns Node sorting\r\n\t */\r\n\tpublic get sortBy(): \"none\" | \"name\" | \"value\" {\r\n\t\treturn this.getPropertyValue(\"sortBy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sometimes nodes can get very small if their value is little. With this setting you\r\n\t * can set min size of a node (this is relative value from the total size of all nodes)\r\n\t * @default 0.02\r\n\t * @param value Node sorting\r\n\t */\r\n\tpublic set minNodeSize(value: number) {\r\n\t\tthis.setPropertyValue(\"minNodeSize\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @returns min node size\r\n\t */\r\n\tpublic get minNodeSize(): number {\r\n\t\treturn this.getPropertyValue(\"minNodeSize\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A list of chart's nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tpublic get nodes():DictionaryTemplate{\r\n\t\tif(!this._nodes){\r\n\t\t\tlet template = this.createNode();\r\n\t\t\ttemplate.events.on(\"hit\", (event)=>{\r\n\t\t\t\tevent.target.handleHit(event);\r\n\t\t\t});\r\n\t\t\tthis._nodes = new DictionaryTemplate(template);\r\n\t\t\tthis._disposers.push(new DictionaryDisposer(this._nodes));\r\n\t\t}\r\n\t\treturn this._nodes;\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 FlowDiagramNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of chart's links.\r\n\t *\r\n\t * @param {ListTemplate}\r\n\t */\r\n\tpublic get links():ListTemplate{\r\n\t\tif(!this._links){\r\n\t\t\tthis._links = new ListTemplate(this.createLink());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._links));\r\n\t\t}\r\n\t\treturn this._links;\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 FlowDiagramLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\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: any[] = [];\r\n\r\n\t\t\tthis.nodes.each((key, node)=>{\r\n\t\t\t\tlegendData.push(node);\r\n\t\t\t});\r\n\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"name\";\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.nodes.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[\"FlowDiagram\"] = FlowDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/FlowDiagram.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 { Label } from \"../../core/elements/Label\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n\r\n\r\n/**\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 ILabelBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ILabelBulletEvents 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 ILabelBulletAdapters extends IBulletAdapters, ILabelBulletProperties { }\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 LabelBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILabelBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILabelBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILabelBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic label: Label;\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 = \"LabelBullet\";\r\n\r\n\t\tlet label = this.createChild(Label);\r\n\t\tlabel.shouldClone = false;\r\n\t\tlabel.verticalCenter = \"middle\";\r\n\t\tlabel.horizontalCenter = \"middle\";\r\n\t\tlabel.truncate = true;\r\n\t\tlabel.hideOversized = false;\r\n\r\n\t\tlabel.maxWidth = 500;\r\n\t\tlabel.maxHeight = 500;\r\n\r\n\t\tlabel.stroke = color();\r\n\t\tlabel.strokeOpacity = 0;\r\n\t\tlabel.fill = new InterfaceColorSet().getFor(\"text\");\r\n\r\n\t\tthis.events.on(\"maxsizechanged\", this.handleMaxSize, this, false);\r\n\r\n\t\tthis.label = label;\r\n\r\n\t\t// not good, as lineSeries will have labels somewhere in the middle.\r\n\t\t//this.locationX = 0.5;\r\n\t\t//this.locationY = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\tprotected handleMaxSize(){\r\n\t\tthis.label.maxWidth = this.maxWidth;\r\n\t\tthis.label.maxHeight = this.maxHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[LabelBullet]].\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.label.copyFrom(source.label);\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[\"LabelBullet\"] = LabelBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/LabelBullet.ts","/**\r\n * SankeyNode 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 { SankeyDiagram, SankeyDiagramDataItem } from \"../types/SankeyDiagram\";\r\nimport { LabelBullet } from \"./LabelBullet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\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\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[SankeyNode]].\r\n */\r\nexport interface ISankeyNodeProperties extends IFlowDiagramNodeProperties {\r\n\r\n\t/**\r\n\t * A level node is at. (0 - ...)\r\n\t */\r\n\tlevel?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyNode]].\r\n */\r\nexport interface ISankeyNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyNodeAdapters extends IFlowDiagramNodeAdapters, ISankeyNodeProperties { }\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 Sankey Diagram.\r\n *\r\n * A Sankey node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[SankeyLink]] elements.\r\n *\r\n * @see {@link ISankeyNodeEvents} for a list of available events\r\n * @see {@link ISankeyNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class SankeyNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyNodeEvents;\r\n\r\n\r\n\t/**\r\n\t * [nextInCoord description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic nextInCoord: number = 0;\r\n\r\n\t/**\r\n\t * [nextOutCoord description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic nextOutCoord: number = 0;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: SankeyDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[SankeyDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: SankeyDiagramDataItem;\r\n\r\n\t/**\r\n\t * A label element which shows node's value.\r\n\t */\r\n\tpublic valueLabel: LabelBullet;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t */\r\n\tpublic nameLabel: LabelBullet;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyNode\";\r\n\r\n\t\tthis.width = 10;\r\n\t\tthis.height = 10;\r\n\r\n\t\tlet nameLabel = this.createChild(LabelBullet);\r\n\t\tnameLabel.shouldClone = false;\r\n\t\t//@should we auto update these locations if position is changed?\r\n\t\tnameLabel.locationX = 1;\r\n\t\tnameLabel.locationY = 0.5;\r\n\t\tnameLabel.label.text = \"{name}\";\r\n\r\n\t\t//nameLabel.label.textElement.hideOversized = false;\r\n\t\tnameLabel.width = 150;\r\n\t\tnameLabel.height = 150;\r\n\t\tnameLabel.label.horizontalCenter = \"left\";\r\n\t\tnameLabel.label.padding(0, 5, 0, 5);\r\n\t\tthis.nameLabel = nameLabel;\r\n\r\n\t\tlet valueLabel = this.createChild(LabelBullet);\r\n\t\tvalueLabel.shouldClone = false;\r\n\t\tvalueLabel.label.hideOversized = false;\r\n\t\tvalueLabel.locationX = 0.5;\r\n\t\tvalueLabel.locationY = 0.5;\r\n\t\tvalueLabel.width = 150;\r\n\t\tvalueLabel.height = 150;\r\n\t\t//valueLabel.label.text = \"{value}\";\r\n\t\tvalueLabel.label.horizontalCenter = \"middle\";\r\n\t\tthis.valueLabel = valueLabel;\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.background.hiddenState.copyFrom(hiddenState);\r\n\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\t\tthis.nextInCoord = 0;\r\n\t\tthis.nextOutCoord = 0;\r\n\t\tlet chart = this.chart;\r\n\r\n\t\tif (chart) {\r\n\t\t\tlet orientation = chart.orientation;\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\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\r\n\t\t\t\t\t\tlet x: number;\r\n\t\t\t\t\t\tlet y: number;\r\n\t\t\t\t\t\tlet angle: number;\r\n\r\n\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\tx = this.pixelX + this.dx;\r\n\t\t\t\t\t\t\ty = this.nextInCoord + this.pixelY + this.dy;\r\n\t\t\t\t\t\t\tangle = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ty = this.pixelY + this.dy;\r\n\t\t\t\t\t\t\tx = this.nextInCoord + this.pixelX + this.dx;\r\n\t\t\t\t\t\t\tangle = 90;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.endX = x;\r\n\t\t\t\t\t\tlink.endY = y;\r\n\t\t\t\t\t\tlink.startAngle = angle;\r\n\t\t\t\t\t\tlink.endAngle = angle;\r\n\t\t\t\t\t\tlink.gradient.rotation = angle;\r\n\r\n\t\t\t\t\t\tlink.linkWidth = value * chart.valueHeight;\r\n\r\n\t\t\t\t\t\tif (!dataItem.fromNode) {\r\n\r\n\t\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\t\tlink.maxWidth = 200;\r\n\t\t\t\t\t\t\t\tlink.startX = this.pixelX + this.dx - link.maxWidth;\r\n\t\t\t\t\t\t\t\tlink.startY = link.endY;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tlink.maxHeight = 200;\r\n\t\t\t\t\t\t\t\tlink.startX = link.endX;\r\n\t\t\t\t\t\t\t\tlink.startY = this.pixelY + this.dy - link.maxHeight;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// TODO is this needed ?\r\n\t\t\t\t\t\t\t$utils.used(link.gradient);\r\n\r\n\t\t\t\t\t\t\tlink.fill = dataItem.toNode.color;\r\n\t\t\t\t\t\t\tlet stop = link.gradient.stops.getIndex(0);\r\n\t\t\t\t\t\t\tif (stop) {\r\n\t\t\t\t\t\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\t\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstop.opacity = 0;\r\n\t\t\t\t\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.stroke = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.gradient.validate();\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//link.validate();\r\n\t\t\t\t\t\tthis.nextInCoord += link.linkWidth;\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._outgoingSorted) {\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\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\tlet x: number;\r\n\t\t\t\t\t\tlet y: number;\r\n\t\t\t\t\t\tlet angle: number;\r\n\r\n\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\tangle = 0;\r\n\t\t\t\t\t\t\tx = this.pixelX + this.pixelWidth + this.dx - 1;\r\n\t\t\t\t\t\t\ty = this.nextOutCoord + this.pixelY + this.dy;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tangle = 90;\r\n\t\t\t\t\t\t\tx = this.nextOutCoord + this.pixelX + this.dx;\r\n\t\t\t\t\t\t\ty = this.pixelY + this.pixelHeight + this.dy - 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.startX = x;\r\n\t\t\t\t\t\tlink.startY = y;\r\n\t\t\t\t\t\tlink.startAngle = angle;\r\n\t\t\t\t\t\tlink.endAngle = angle;\r\n\t\t\t\t\t\tlink.gradient.rotation = angle;\r\n\r\n\t\t\t\t\t\tlink.linkWidth = value * this.chart.valueHeight;\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\t\tlink.maxWidth = 200;\r\n\t\t\t\t\t\t\t\tlink.endX = this.pixelX + link.maxWidth + this.dx;\r\n\t\t\t\t\t\t\t\tlink.endY = link.startY;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tlink.maxHeight = 200;\r\n\t\t\t\t\t\t\t\tlink.endX = link.startX;\r\n\t\t\t\t\t\t\t\tlink.endY = this.pixelY + link.maxHeight + this.dy;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tlink.opacity = this.opacity;\r\n\r\n\t\t\t\t\t\t\tlet stop = link.gradient.stops.getIndex(1);\r\n\t\t\t\t\t\t\tif (stop) {\r\n\t\t\t\t\t\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\t\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstop.opacity = 0;\r\n\t\t\t\t\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.stroke = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.gradient.validate();\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//link.validate();\r\n\t\t\t\t\t\tthis.nextOutCoord += link.linkWidth;\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\tthis.positionBullet(this.nameLabel);\r\n\t\tthis.positionBullet(this.valueLabel);\r\n\t}\r\n\r\n\t/**\r\n\t * Positions the bullet so it is centered within the node element.\r\n\t *\r\n\t * @param bullet Target bullet\r\n\t */\r\n\tprotected positionBullet(bullet: LabelBullet) {\r\n\t\tif (bullet) {\r\n\t\t\tbullet.x = this.measuredWidth * bullet.locationX;\r\n\t\t\tbullet.y = this.measuredHeight * bullet.locationY;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A level node is displayed at. (0 - ...)\r\n\t *\r\n\t * Levels are measured from left to right.\r\n\t *\r\n\t * The nodes in the left-most column will have `level = 0`.\r\n\t *\r\n\t * Nodes in second column - `level = 1`, etc.\r\n\t *\r\n\t * @param value Level\r\n\t */\r\n\tpublic set level(value: number) {\r\n\t\tthis.setPropertyValue(\"level\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\treturn this.getPropertyValue(\"level\");\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[SankeyNode]].\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.nameLabel.copyFrom(source.nameLabel);\r\n\t\tthis.valueLabel.copyFrom(source.valueLabel);\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[\"SankeyNode\"] = SankeyNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/SankeyNode.ts","/**\r\n * SankeyLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SankeyDiagramDataItem } from \"../types/SankeyDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Polyspline } from \"../../core/elements/Polyspline\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\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 [[SankeyLink]].\r\n */\r\nexport interface ISankeyLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [tension description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartX?: number;\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartY?: number;\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendX?: number;\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendY?: number;\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tlinkWidth?: number;\r\n\r\n\t/**\r\n\t * [controlPointDistance description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tcontrolPointDistance?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyLink]].\r\n */\r\nexport interface ISankeyLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyLinkAdapters extends IFlowDiagramLinkAdapters, ISankeyLinkProperties { }\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 * Sankey Diagram.\r\n *\r\n * @see {@link ISankeyLinkEvents} for a list of available events\r\n * @see {@link ISankeyLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class SankeyLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyLinkEvents;\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: SankeyDiagramDataItem;\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: Polyspline;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyLink\";\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tnew InterfaceColorSet();\r\n\r\n\t\tthis.tension = 0.8;\r\n\t\tthis.controlPointDistance = 0.2;\r\n\r\n\t\tthis.startAngle = 0;\r\n\t\tthis.endAngle = 0;\r\n\r\n\t\tthis.linkWidth = 0;\r\n\r\n\t\tthis.startX = 0;\r\n\t\tthis.endX = 0;\r\n\r\n\t\tthis.startY = 0;\r\n\t\tthis.endY = 0;\r\n\r\n\t\tthis.middleLine = this.createChild(Polyspline);\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\r\n\t\t\tlet x0 = this.startX\r\n\t\t\tlet y0 = this.startY;\r\n\t\t\tlet x1 = this.endX;\r\n\t\t\tlet y1 = this.endY;\r\n\r\n\t\t\tif (!$type.isNumber(x1)) {\r\n\t\t\t\tx1 = x0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(y1)) {\r\n\t\t\t\ty1 = y0;\r\n\t\t\t}\r\n\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet w = this.linkWidth;\r\n\r\n\t\t\tlet path = \"\";\r\n\r\n\t\t\tlet xt0 = x0;\r\n\t\t\tlet yt0 = y0;\r\n\r\n\t\t\tlet xt1 = x1;\r\n\t\t\tlet yt1 = y1;\r\n\r\n\t\t\tlet xb0 = x0 + w * $math.sin(startAngle);\r\n\t\t\tlet xb1 = x1 + w * $math.sin(endAngle);\r\n\r\n\t\t\tlet yb0 = y0 + w * $math.cos(startAngle);\r\n\t\t\tlet yb1 = y1 + w * $math.cos(endAngle);\r\n\r\n\t\t\tlet xm0 = x0 + w / 2 * $math.sin(startAngle);\r\n\t\t\tlet xm1 = x1 + w / 2 * $math.sin(endAngle);\r\n\r\n\t\t\tlet ym0 = y0 + w / 2 * $math.cos(startAngle);\r\n\t\t\tlet ym1 = y1 + w / 2 * $math.cos(endAngle);\r\n\r\n\t\t\tthis.zIndex = this.zIndex || this.dataItem.index;\r\n\r\n\t\t\tlet tensionX = this.tension + (1 - this.tension) * $math.sin(startAngle);\r\n\t\t\tlet tensionY = this.tension + (1 - this.tension) * $math.cos(startAngle);\r\n\r\n\t\t\tthis.middleLine.tensionX = tensionX;\r\n\t\t\tthis.middleLine.tensionY = tensionY;\r\n\r\n\t\t\tif ($type.isNumber(w) && ($type.isNumber(x0) && $type.isNumber(x1) && $type.isNumber(y0) && $type.isNumber(y1))) {\r\n\r\n\t\t\t\t// solves issues with gradient fill of straight lines\r\n\t\t\t\tif ($math.round(xt0, 3) == $math.round(xt1, 3)) {\r\n\t\t\t\t\txt1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(yt0, 3) == $math.round(yt1, 3)) {\r\n\t\t\t\t\tyt1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(xb0, 3) == $math.round(xb1, 3)) {\r\n\t\t\t\t\txb1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(yb0, 3) == $math.round(yb1, 3)) {\r\n\t\t\t\t\tyb1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet minX = Math.min(xb0, xb1, xt0, xt1);\r\n\t\t\t\tlet minY = Math.min(yb0, yb1, yt0, yt1);\r\n\t\t\t\tlet maxX = Math.max(xb0, xb1, xt0, xt1);\r\n\t\t\t\tlet maxY = Math.max(yb0, yb1, yt0, yt1);\r\n\r\n\t\t\t\tthis._bbox = {\r\n\t\t\t\t\tx: minX,\r\n\t\t\t\t\ty: minY,\r\n\t\t\t\t\twidth: maxX - minX,\r\n\t\t\t\t\theight: maxY - minY\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet cpd = this.controlPointDistance;\r\n\r\n\t\t\t\tlet kxt0 = xt0 + (xt1 - xt0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kyt0 = yt0 + (yt1 - yt0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxt1 = xt1 - (xt1 - xt0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kyt1 = yt1 - (yt1 - yt0) * cpd * $math.sin(endAngle);\r\n\r\n\t\t\t\tlet kxm0 = xm0 + (xm1 - xm0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kym0 = ym0 + (ym1 - ym0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxm1 = xm1 - (xm1 - xm0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kym1 = ym1 - (ym1 - ym0) * cpd * $math.sin(endAngle);\r\n\r\n\t\t\t\tlet angle = $math.getAngle({ x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 });\r\n\r\n\t\t\t\tlet dx = (w / $math.cos(angle) - w) / $math.tan(angle) * $math.cos(startAngle);\r\n\t\t\t\tlet dy = (w / $math.sin(angle) - w) * $math.tan(angle) * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxb0 = -dx / 2 + xb0 + (xb1 - xb0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kyb0 = -dy / 2 + yb0 + (yb1 - yb0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxb1 = -dx / 2 + xb1 - (xb1 - xb0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kyb1 = -dy / 2 + yb1 - (yb1 - yb0) * cpd * $math.sin(endAngle);\r\n\r\n\r\n\t\t\t\tthis.middleLine.segments = [[{ x: xm0, y: ym0 }, { x: kxm0, y: kym0 }, { x: kxm1, y: kym1 }, { x: xm1, y: ym1 }]];\r\n\r\n\t\t\t\tkxt0 += dx / 2;\r\n\t\t\t\tkyt0 += dy / 2;\r\n\r\n\t\t\t\tkxt1 += dx / 2;\r\n\t\t\t\tkyt1 += dy / 2;\r\n\r\n\t\t\t\tpath += $path.moveTo({ x: xt0, y: yt0 });\r\n\t\t\t\tpath += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xt0, y: yt0 }, { x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 }, { x: xt1, y: yt1 }]);\r\n\t\t\t\tpath += $path.lineTo({ x: xb1, y: yb1 });\r\n\t\t\t\tpath += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xb1, y: yb1 }, { x: kxb1, y: kyb1 }, { x: kxb0, y: kyb0 }, { x: xb0, y: yb0 }]);\r\n\t\t\t\tpath += $path.closePath();\r\n\t\t\t}\r\n\r\n\t\t\tthis.link.path = path;\r\n\r\n\t\t\tif (this.maskBullets) {\r\n\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t}\r\n\t\t\tthis.positionBullets();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value Start X\r\n\t */\r\n\tpublic set startX(value: number) {\r\n\t\tthis.setPropertyValue(\"startX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start X\r\n\t */\r\n\tpublic get startX(): number {\r\n\t\treturn this.getPropertyValue(\"startX\");\r\n\t}\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End X\r\n\t */\r\n\tpublic set endX(value: number) {\r\n\t\tthis.setPropertyValue(\"endX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End X\r\n\t */\r\n\tpublic get endX(): number {\r\n\t\treturn this.getPropertyValue(\"endX\");\r\n\t}\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value Start Y\r\n\t */\r\n\tpublic set startY(value: number) {\r\n\t\tthis.setPropertyValue(\"startY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start Y\r\n\t */\r\n\tpublic get startY(): number {\r\n\t\treturn this.getPropertyValue(\"startY\");\r\n\t}\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End Y\r\n\t */\r\n\tpublic set endY(value: number) {\r\n\t\tthis.setPropertyValue(\"endY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End Y\r\n\t */\r\n\tpublic get endY(): number {\r\n\t\treturn this.getPropertyValue(\"endY\");\r\n\t}\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set linkWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"linkWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [description]\r\n\t */\r\n\tpublic get linkWidth(): number {\r\n\t\treturn this.getPropertyValue(\"linkWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Distance of control point of a link, defines relative distance from a node at which linke should bend\r\n\t * @default 0.2\r\n\t * @param value\r\n\t */\r\n\tpublic set controlPointDistance(value: number) {\r\n\t\tthis.setPropertyValue(\"controlPointDistance\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return relative control point distance\r\n\t */\r\n\tpublic get controlPointDistance(): number {\r\n\t\treturn this.getPropertyValue(\"controlPointDistance\");\r\n\t}\r\n\r\n\t/**\r\n\t * Tension of a spline, 1 would make the link to have sharp edges\r\n\t * @default 0.8\r\n\t * @param value\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 value\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\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[\"SankeyLink\"] = SankeyLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/SankeyLink.ts","/**\r\n * Sankey diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { SankeyNode } from \"../elements/SankeyNode\";\r\nimport { SankeyLink } from \"../elements/SankeyLink\";\r\nimport { Animation } from \"../../core/utils/Animation\";\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 $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//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SankeyDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SankeyDiagramDataItem 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!: SankeyDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: SankeyLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: SankeyNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: SankeyNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyDiagramDataItem\";\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 [[SankeyDiagram]].\r\n */\r\nexport interface ISankeyDiagramDataFields 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 [[SankeyDiagram]]\r\n */\r\nexport interface ISankeyDiagramProperties extends IFlowDiagramProperties {\r\n\r\n\t/**\r\n\t * Sort nodes by name or value or do not sort at all\r\n\t */\r\n\tnodeAlign?: \"top\" | \"bottom\" | \"middle\";\r\n\r\n\r\n\t/**\r\n\t * Orientation of the chart.\r\n\t */\r\n\torientation?: Orientation;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyDiagram]].\r\n */\r\nexport interface ISankeyDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyDiagramAdapters extends IFlowDiagramAdapters, ISankeyDiagramProperties { }\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 Sankey Diagram chart.\r\n *\r\n * @see {@link ISankeyDiagramEvents} for a list of available Events\r\n * @see {@link ISankeyDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sankey-diagram/} for documentation\r\n * @important\r\n */\r\nexport class SankeyDiagram extends FlowDiagram {\r\n\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: SankeyDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ISankeyDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyDiagramEvents;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: SankeyLink;\r\n\r\n\t/**\r\n\t * @todo Description\r\n\t */\r\n\tprotected _levelSum: { [index: number]: number };\r\n\r\n\t/**\r\n\t * @todo Description\r\n\t */\r\n\tprotected _levelNodesCount: { [index: number]: number };\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node: SankeyNode;\r\n\r\n\t/**\r\n\t * [maxSum description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic maxSum: number;\r\n\r\n\t/**\r\n\t * level with max sum\r\n\t */\r\n\tprotected _maxSumLevel: number;\r\n\r\n\t/**\r\n\t * [valueHeight description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected _valueHeight: number;\r\n\r\n\t/**\r\n\t * A total number of levels, present on this chart.\r\n\t */\r\n\tprotected _levelCount: number;\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, this[\"_node\"]]>;\r\n\r\n\tprotected _heightAnimation: Animation;\r\n\r\n\tprotected _level: number;\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 = \"SankeyDiagram\";\r\n\t\tthis.orientation = \"horizontal\";\r\n\t\tthis.nodeAlign = \"middle\";\r\n\r\n\t\tthis.nodesContainer.width = percent(100);\r\n\t\tthis.nodesContainer.height = percent(100);\r\n\r\n\t\tthis.linksContainer.width = percent(100);\r\n\t\tthis.linksContainer.height = percent(100);\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's data, effectively causing the chart to redraw.\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\r\n\t\tthis._levelCount = 0;\r\n\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tnode.level = undefined;\r\n\t\t});\t\t\r\n\t\t\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tnode.level = this.getNodeLevel(node, 0);\r\n\t\t\tthis._levelCount = $math.max(this._levelCount, node.level);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns node's highest level.\r\n\t *\r\n\t * @param node Node\r\n\t * @param level Current level\r\n\t * @return New level\r\n\t */\r\n\tprotected getNodeLevel(node: this[\"_node\"], level: number): number {\r\n\t\t//@todo solve circular so\r\n\t\tlet levels: number[] = [level];\r\n\t\t$iter.each(node.incomingDataItems.iterator(), (link) => {\r\n\t\t\tif (link.fromNode) {\r\n\t\t\t\tif ($type.isNumber(link.fromNode.level)) {\r\n\t\t\t\t\tlevels.push(link.fromNode.level + 1);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlevels.push(this.getNodeLevel(link.fromNode, level + 1));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn Math.max(...levels);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Calculates relation between pixel height and total value.\r\n\t *\r\n\t * In Sankey the actual thickness of links and height of nodes will depend\r\n\t * on their values.\r\n\t */\r\n\tprotected calculateValueHeight() {\r\n\t\t// calculate sums of each level\r\n\t\tthis._levelSum = {};\r\n\t\tthis._levelNodesCount = {};\r\n\t\tthis.maxSum = 0;\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\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});\r\n\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tlet level = node.level;\r\n\r\n\t\t\tlet value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n\r\n\t\t\tif (value / total < this.minNodeSize) {\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.isNumber(this._levelSum[level])) {\r\n\t\t\t\tthis._levelSum[level] += value;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._levelSum[level] = value;\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.isNumber(this._levelNodesCount[level])) {\r\n\t\t\t\tthis._levelNodesCount[level]++;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._levelNodesCount[level] = 1;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tlet availableHeight: number;\r\n\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\tavailableHeight = this.chartContainer.maxHeight - 1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tavailableHeight = this.chartContainer.maxWidth - 1;\r\n\t\t}\r\n\r\n\r\n\t\tlet maxSumLevel: number;\r\n\r\n\t\t$object.each(this._levelSum, (key, value) => {\r\n\t\t\tlet realValue = value;\r\n\t\t\tvalue = value * availableHeight / (availableHeight - (this._levelNodesCount[key] - 1) * this.nodePadding);\r\n\r\n\t\t\tif (this.maxSum < value) {\r\n\t\t\t\tthis.maxSum = realValue;\r\n\t\t\t\tmaxSumLevel = $type.toNumber(key);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._maxSumLevel = maxSumLevel;\r\n\t\tlet maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n\r\n\t\tlet valueHeight = (availableHeight - (maxSumLevelNodeCount - 1) * this.nodePadding) / this.maxSum;\r\n\r\n\t\tif (!$type.isNumber(this.valueHeight)) {\r\n\t\t\tthis.valueHeight = valueHeight;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet finalHeight;\r\n\t\t\ttry {\r\n\t\t\t\tfinalHeight = this._heightAnimation.animationOptions[0].to;\r\n\t\t\t}\r\n\t\t\tcatch (err) {\r\n\r\n\t\t\t}\r\n\t\t\t// without animations it will be non-smooth as maxValue jumps from one column to another\r\n\t\t\tif (finalHeight != valueHeight) {\r\n\t\t\t\tlet duration = this.interpolationDuration;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tduration = this.nodes.template.states.getKey(\"active\").transitionDuration;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err) {\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._heightAnimation = new Animation(this, { property: \"valueHeight\", from: this.valueHeight, to: valueHeight }, duration, this.interpolationEasing).start();\r\n\t\t\t\tthis._disposers.push(this._heightAnimation);\r\n\t\t\t}\r\n\t\t}\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\tsuper.validate();\r\n\r\n\t\tthis.calculateValueHeight();\r\n\r\n\t\tlet container = this.nodesContainer;\r\n\r\n\t\tlet nextCoordinate: { [index: number]: number } = {};\r\n\r\n\t\tlet maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet level = node.level;\r\n\t\t\tlet levelCoordinate: number = 0;\r\n\r\n\t\t\tlet nodeCount = this._levelNodesCount[level];\r\n\r\n\t\t\tswitch (this.nodeAlign) {\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\tlevelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight - (nodeCount - maxSumLevelNodeCount) * this.nodePadding;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tlevelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight / 2 - (nodeCount - maxSumLevelNodeCount) * this.nodePadding / 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tnode.parent = container;\r\n\r\n\t\t\tlet delta: number;\r\n\t\t\tlet x: number;\r\n\t\t\tlet y: number;\r\n\r\n\t\t\tlet value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n\r\n\t\t\tif (value / total < this.minNodeSize) {\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tdelta = (this.innerWidth - node.pixelWidth) / this._levelCount;\r\n\r\n\t\t\t\tx = delta * node.level;\r\n\t\t\t\ty = nextCoordinate[level] || levelCoordinate;\r\n\r\n\t\t\t\tlet h = value * this.valueHeight;\r\n\r\n\t\t\t\tnode.height = h;\r\n\t\t\t\tnode.minX = x;\r\n\t\t\t\tnode.maxX = x;\r\n\t\t\t\tnextCoordinate[level] = y + h + this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdelta = (this.innerHeight - node.pixelHeight) / this._levelCount;\r\n\r\n\t\t\t\tx = nextCoordinate[level] || levelCoordinate;\r\n\t\t\t\ty = delta * node.level;\r\n\r\n\t\t\t\tlet w = value * this.valueHeight;\r\n\r\n\t\t\t\tnode.width = w;\r\n\t\t\t\tnode.minY = y;\r\n\t\t\t\tnode.maxY = y;\r\n\t\t\t\tnextCoordinate[level] = x + w + this.nodePadding;\r\n\t\t\t}\r\n\t\t\tnode.x = x;\r\n\t\t\tnode.y = y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Performs actual operations to reveal this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param duration Fade in duration (ms)\r\n\t * @return Fade in duration (ms)\r\n\t */\r\n\tprotected showReal(duration?: number): $type.Optional {\r\n\r\n\t\tif (this.interpolationDuration > 0) {\r\n\t\t\tlet container = this.nodesContainer;\r\n\r\n\t\t\tlet i: number = 0;\r\n\r\n\t\t\t$iter.each(this.links.iterator(), (link) => {\r\n\t\t\t\tlink.hide(0);\r\n\t\t\t})\r\n\r\n\t\t\t$iter.each(this._sorted, (strNode) => {\r\n\r\n\t\t\t\tlet node = strNode[1];\r\n\r\n\t\t\t\tlet property: \"dx\" | \"dy\";\r\n\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\tnode.dx = -(container.pixelWidth - node.pixelWidth) / this._levelCount;\r\n\t\t\t\t\tproperty = \"dx\";\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnode.dy = -(container.pixelHeight - node.pixelHeight) / this._levelCount;\r\n\t\t\t\t\tproperty = \"dy\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet delay = 0;\r\n\t\t\t\tlet duration = this.interpolationDuration;\r\n\t\t\t\tif (this.sequencedInterpolation) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + duration * i / $iter.length(this.nodes.iterator());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnode.opacity = 0;\r\n\t\t\t\tnode.invalidateLinks();\r\n\r\n\t\t\t\tnode.animate([{ property: \"opacity\", from: 0, to: 1 }, { property: property, to: 0 }], this.interpolationDuration, this.interpolationEasing).delay(delay);\r\n\r\n\t\t\t\t$iter.each(node.outgoingDataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tlet animation = dataItem.link.show(this.interpolationDuration);\r\n\t\t\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\t\t\tanimation.delay(delay);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t$iter.each(node.incomingDataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlet animation = dataItem.link.show(this.interpolationDuration);\r\n\t\t\t\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\t\t\t\tanimation.delay(delay);\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\ti++;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn super.showReal();\r\n\t}\r\n\r\n\t/**\r\n\t * Changes the sort type of the nodes.\r\n\t *\r\n\t * This will actually reshuffle nodes using nice animation.\r\n\t */\r\n\tprotected changeSorting() {\r\n\t\tthis.sortNodes();\r\n\r\n\t\tlet nextCoordinate: { [index: number]: number } = {};\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet level = node.level;\r\n\r\n\t\t\tlet levelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight / 2;\r\n\r\n\t\t\tlet property: \"x\" | \"y\";\r\n\t\t\tlet nodeHeight: number;\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tproperty = \"y\";\r\n\t\t\t\tnodeHeight = node.pixelHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tproperty = \"x\";\r\n\t\t\t\tnodeHeight = node.pixelWidth;\r\n\t\t\t}\r\n\r\n\t\t\tnode.animate({ property: property, to: nextCoordinate[level] || levelCoordinate }, this.interpolationDuration, this.interpolationEasing);\r\n\t\t\tnextCoordinate[level] = (nextCoordinate[level] || levelCoordinate) + nodeHeight + this.nodePadding;\r\n\r\n\t\t\tnode.invalidateLinks();\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(\"Sankey 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 SankeyDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * How to align nodes. In case layout is vertical, top means left and bottom means right\r\n\t *\r\n\t * @param value Node sorting\r\n\t */\r\n\tpublic set nodeAlign(value: \"top\" | \"middle\" | \"bottom\") {\r\n\t\tthis.setPropertyValue(\"nodeAlign\", value);\r\n\t\tthis.changeSorting();\r\n\t}\r\n\r\n\t/**\r\n\t * @returns Returns nodeAlign value\r\n\t */\r\n\tpublic get nodeAlign(): \"top\" | \"middle\" | \"bottom\" {\r\n\t\treturn this.getPropertyValue(\"nodeAlign\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the chart: \"horizontal\" or \"vertical\";\r\n\t *\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\tlet nameLabel = this.nodes.template.nameLabel;\r\n\r\n\t\tif (value == \"vertical\") {\r\n\t\t\tthis.nodes.template.width = undefined;\r\n\t\t\tnameLabel.label.horizontalCenter = \"middle\";\r\n\t\t\tnameLabel.locationX = 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.nodes.template.height = undefined;\r\n\t\t\tnameLabel.label.horizontalCenter = \"left\";\r\n\t\t\tnameLabel.locationX = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\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 SankeyNode();\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 SankeyLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get valueHeight(): number {\r\n\t\treturn this._valueHeight;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set valueHeight(value: number) {\r\n\t\tif (value != this._valueHeight) {\r\n\t\t\tthis._valueHeight = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tdisposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis._sorted = this.nodes.iterator();\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[\"SankeyDiagram\"] = SankeyDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SankeyDiagram.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 { 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 { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $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\tlet label = this.createChild(AxisLabelCircular);\r\n\t\tlabel.location = 0.5;\r\n\t\tlabel.radius = 5;\r\n\t\tlabel.text = \"{name}\";\r\n\t\tlabel.zIndex = 1;\r\n\t\tlabel.shouldClone = false;\r\n\t\tthis.label = label;\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\tlabel.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 { IPoint, IOrientationPoint } from \"../defs/IPoint\";\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 { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\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 * 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\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\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 { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DictionaryTemplate } from \"../../core/utils/Dictionary\";\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 * 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 $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\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 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 * Module that defines everything related to building Columns.\r\n * It is a container which has column element which is a RoundedRectangle.\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 { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\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 [[Column]].\r\n */\r\nexport interface IColumnProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Column]].\r\n */\r\nexport interface IColumnEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Column]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnAdapters extends IContainerAdapters, IColumnProperties { }\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 Columns.\r\n *\r\n * @see {@link IColumnEvents} for a list of available events\r\n * @see {@link IColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Column extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnEvents;\r\n\r\n\t/**\r\n\t * column element\r\n\t */\r\n\tpublic column: RoundedRectangle;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic realWidth: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic realHeight: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic realX: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic realY: number;\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 = \"Column\";\r\n\r\n\t\tthis.width = percent(80);\r\n\t\tthis.height = percent(80);\r\n\r\n\t\t//this.isMeasured = true; // for correct position of the tooltip\r\n\t\tthis.applyOnClones = true;\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.createAssets();\r\n\r\n\t\t// otherwise users will have to set layout themselves if they'll want to align, scale etc children\r\n\t\tthis.events.on(\"childadded\", this.handleKidAdded, this, false);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleKidAdded() {\r\n\t\tif (this.layout == \"none\") {\r\n\t\t\tthis.layout = \"absolute\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.column = this.createChild(RoundedRectangle);\r\n\t\tthis.column.shouldClone = false;\r\n\t\tthis.column.cornerRadius(0, 0, 0, 0);\r\n\t\tthis._disposers.push(this.column);\r\n\t}\r\n\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 column = this.column;\r\n\t\tif (column) {\r\n\t\t\tcolumn.width = $math.min(this.pixelWidth, this.maxWidth);\r\n\t\t\tcolumn.height = $math.min(this.pixelHeight, this.maxHeight);\r\n\t\t\tif(column.invalid){\r\n\t\t\t\tcolumn.validate(); // important!\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * Copies all parameters from another [[Column]].\r\n\t *\r\n\t * @param source Source Column\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tif (this.column) {\r\n\t\t\tthis.column.copyFrom(source.column);\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\tif (this.column) {\r\n\t\t\treturn { x: 0, y: 0, width: this.column.measuredWidth, height: this.column.measuredHeight };\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: 0, y: 0, width: $math.min(this.pixelWidth, this.maxWidth), height: $math.min(this.pixelHeight, this.maxHeight) };\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[\"Column\"] = Column;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Column.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, visualProperties } from \"../../core/Sprite\";\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 { 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 { 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 { Disposer } 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\r\n\t/**\r\n\t * Type of column.\r\n\t */\r\n\tpublic _column: Column;\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.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) && maxWidth < Math.abs(r - l)) {\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) && maxHeight < Math.abs(b - t)) {\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) && maxWidth < Math.abs(r - l)) {\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\tif ((this.dataFields)[this.yField] != (this.dataFields)[this.yOpenField]) {\r\n\t\t\t\t\tbottomLocation = 0;\r\n\t\t\t\t\ttopLocation = 0;\r\n\t\t\t\t}\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 = Math.ceil(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) && maxHeight < Math.abs(b - t)) {\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\r\n\t\t\t\t\t\t\tconsole.log(maxHeight, Math.abs(b - t))\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\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\tif ((this.dataFields)[this.xField] != (this.dataFields)[this.xOpenField]) {\r\n\t\t\t\t\trightLocation = 0;\r\n\t\t\t\t\tleftLocation = 0;\r\n\t\t\t\t}\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 = Math.ceil(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\t\t\t\tcolumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\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.on(\"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.on(\"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.on(\"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.on(\"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\trangeColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\t\t\t\t\t\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 && this.xAxis instanceof ValueAxis) {\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 && this.yAxis instanceof ValueAxis) {\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\"], notRange?: boolean) {\r\n\t\tsuper.updateLegendValue(dataItem, notRange);\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\tlet bulletLocationX = bullet.locationX;\r\n\t\t\tif (!$type.isNumber(bulletLocationX)) {\r\n\t\t\t\tbulletLocationX = 0.5;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._endLocation - (this._endLocation - this._startLocation) * bulletLocationX;\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\tlet bulletLocationY = bullet.locationY;\r\n\t\t\tif (!$type.isNumber(bulletLocationY)) {\r\n\t\t\t\tbulletLocationY = 0.5;\r\n\t\t\t}\r\n\t\t\treturn this._endLocation - (this._endLocation - this._startLocation) * bulletLocationY;\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\tprotected getAdjustedXLocation(dataItem: this[\"_dataItem\"], field: string) {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet bulletLocationX = 0.5;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tbulletLocationX = dataItem.locations[field];\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(bulletLocationX)) {\r\n\t\t\t\tbulletLocationX = 0.5;\r\n\t\t\t}\r\n\t\t\treturn this._endLocation - (this._endLocation - this._startLocation) * bulletLocationX;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getAdjustedXLocation(dataItem, field);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getAdjustedYLocation(dataItem: this[\"_dataItem\"], field: string) {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet bulletLocationY = 0.5;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tbulletLocationY = dataItem.locations[field];\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(bulletLocationY)) {\r\n\t\t\t\tbulletLocationY = 0.5;\r\n\t\t\t}\r\n\t\t\treturn this._endLocation - (this._endLocation - this._startLocation) * bulletLocationY;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getAdjustedXLocation(dataItem, field);\r\n\t\t}\r\n\t}\r\n\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 { 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 * 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 { 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\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\treturn treeMapDataItem.value;\r\n\t\t}\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\t/**\r\n\t * Hides the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param toValue A value to set to `fields` when hiding\r\n\t * @param fields A list of data fields to set value to `toValue`\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): $type.Optional {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\ttreeMapDataItem.hide(duration);\r\n\t\t}\r\n\t\treturn super.hide(duration, delay, toValue, fields);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param fields A list of fields to set values of\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): $type.Optional {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\ttreeMapDataItem.show(duration, delay, fields);\r\n\t\t}\r\n\t\treturn super.show(duration, delay, fields);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\t//dataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t\tdataItem.show(duration);\r\n\t\t})\r\n\r\n\t\treturn super.showReal(interpolationDuration);\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\t//dataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t\tdataItem.hide(duration);\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 { 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 { Export } from \"../../core/export/Export\";\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\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 [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Series of children data items.\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * A reference to a corresponding legend data item.\r\n\t */\r\n\tprotected _legendDataItem: LegendDataItem;\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 * A legend's data item, that corresponds to this data item.\r\n\t *\r\n\t * @param value Legend data item\r\n\t */\r\n\tpublic set legendDataItem(value: LegendDataItem) {\r\n\t\tthis._legendDataItem = value;\r\n\t\tif (value.label) {\r\n\t\t\tvalue.label.dataItem = this;\r\n\t\t}\r\n\t\tif (value.valueLabel) {\r\n\t\t\tvalue.valueLabel.dataItem = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Legend data item\r\n\t */\r\n\tpublic get legendDataItem(): LegendDataItem {\r\n\t\treturn this._legendDataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a duration (ms) the Data Item should take to animate from one\r\n\t * value to another.\r\n\t *\r\n\t * If the duration is not specified via parameter, this method will try to\r\n\t * request a default duration from the related `Component`.\r\n\t *\r\n\t * @param duration Default duration (ms)\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic getDuration(): number {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\r\n\t\tlet value = 0;\r\n\t\tif (!this.children || this.children.length == 0) {\r\n\t\t\tvalue = this.values[\"value\"].workingValue;\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\tlet childValue = child.value;\r\n\t\t\t\tif ($type.isNumber(childValue)) {\r\n\t\t\t\t\tvalue += childValue;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t\t/*\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;*/\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * For the legend to work properly\r\n\t */\r\n\tpublic get fill(): Color {\r\n\t\treturn this.color;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * Series of children data items\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (series != this._series) {\r\n\t\t\tif (this._series) {\r\n\t\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\t\tthis._series.dispose();\r\n\t\t\t}\r\n\t\t\tthis._series = series;\r\n\t\t\tthis._disposers.push(series);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param toValue A value to set to `fields` when hiding\r\n\t * @param fields A list of data fields to set value to `toValue`\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): $type.Optional {\r\n\t\tthis.setWorkingValue(\"value\", 0);\r\n\t\tif (this.children) {\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tchild.hide(duration, delay, toValue, fields);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn super.hide(duration, delay, toValue, fields);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param fields A list of fields to set values of\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): $type.Optional {\r\n\t\tthis.setWorkingValue(\"value\", this.values.value.value);\r\n\t\tif (this.children) {\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tchild.show(duration, delay, fields);\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn super.show(duration, delay, fields);\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 number of levels the chart will display initially.\r\n\t *\r\n\t * @default 2\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied automatically to each new chart item, if\r\n\t * not explicitly set.\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tif (!dataItem.isDisposed()) {\r\n\t\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t\t}\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\t\tthis._tempSeries = [];\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 = Math.round((maxX * this.pixelHeight / this.pixelWidth) / 10) * 10 || 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\t\tthis.xAxis.getMinMax();\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\t\tthis.yAxis.getMinMax();\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\tprotected setData(value: any[]) {\r\n\t\tthis.currentLevel = 0;\r\n\t\tthis.currentlyZoomed = undefined;\r\n\t\tthis.xAxis.start = 0;\r\n\t\tthis.xAxis.end = 1;\r\n\t\tthis.yAxis.start = 0;\r\n\t\tthis.yAxis.end = 1;\r\n\t\tsuper.setData(value);\r\n\t}\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\t\t\t// for the legend to get {value}\r\n\t\t\tseries.dataItem.dataContext = dataItem;\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\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tdataItem.bullets.each((key, bullet) => {\r\n\t\t\t\t\t\tbullet.show();\r\n\t\t\t\t\t})\r\n\t\t\t\t})\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\telse if (series.level == this.currentLevel) {\r\n\t\t\t\t\tif(this.maxLevels > 1){\r\n\t\t\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\t\t\tif (dataItem.treeMapDataItem.children) {\r\n\t\t\t\t\t\t\t\tdataItem.bullets.each((key, bullet) => {\r\n\t\t\t\t\t\t\t\t\tbullet.hide();\r\n\t\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}\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\tlet zoomOutButton = this.zoomOutButton;\r\n\t\t// this is needed because if there is only one fist level, it wont' be shown\r\n\t\tif (zoomOutButton) {\r\n\t\t\tif (dataItem != this._homeDataItem) {\r\n\t\t\t\tzoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tzoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\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.isDisposed() && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\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 number of levels the chart will display initially.\r\n\t *\r\n\t * @default 2\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;\r\n\t\t\t\tnode.y0 = y0;\r\n\t\t\t\tnode.x1 = x1;\r\n\t\t\t\tnode.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) {\r\n\t\t\t\t\tk = mid + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\thi = mid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) {\r\n\t\t\t\t--k;\r\n\t\t\t}\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\tlet node;\r\n\t\tlet i = -1;\r\n\t\tlet n = nodes.length;\r\n\t\tlet k = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i);\r\n\t\t\tnode.x0 = x0;\r\n\t\t\tnode.x1 = x1;\r\n\t\t\tnode.y0 = y0;\r\n\t\t\ty0 += node.value * k;\r\n\t\t\tnode.y1 = y0;\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);\r\n\t\t\tnode.y0 = y0;\r\n\t\t\tnode.y1 = y1;\r\n\t\t\tnode.x0 = x0;\r\n\t\t\tx0 += node.value * k;\r\n\t\t\tnode.x1 = x0;\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\tif (parent.level & 1) {\r\n\t\t\tthis.slice(parent);\r\n\t\t} else {\r\n\t\t\tthis.dice(parent);\r\n\t\t}\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;\r\n\t\t\tdy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo {\r\n\t\t\t\tsumValue = nodes.getIndex(i1++).value;\r\n\t\t\t} while (!sumValue && i1 < n);\r\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;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue;\r\n\t\t\ti0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleSeriesAdded2(){\r\n\t\t// void\r\n\t}\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\tprotected getLegendLevel(dataItem: TreeMapDataItem): TreeMapDataItem {\r\n\t\tif (!dataItem) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!dataItem.children) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (dataItem.children.length > 1) {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t\telse if (dataItem.children.length == 1) {\r\n\t\t\treturn this.getLegendLevel(dataItem.children.getIndex(0));\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t}\r\n\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\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\r\n\t\t\tlet legendParent = this.getLegendLevel(this._homeDataItem);\r\n\t\t\tif (legendParent) {\r\n\t\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t\tlegendParent.children.each((dataItem) => {\r\n\t\t\t\t\t//if (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\tlegendData.push(dataItem);\r\n\t\t\t\t\t//}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tlegend.data = legendData;\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\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\t/**\r\n\t * Since this chart uses hierarchical data, we need to remove childrent\r\n\t * dataField from export of non-hierarchical formats such as CSV and XSLX.\r\n\t *\r\n\t * @return Export\r\n\t */\r\n\tprotected getExporting(): Export {\r\n\t\tconst exporting = super.getExporting();\r\n\t\texporting.adapter.add(\"formatDataFields\", (info) => {\r\n\t\t\tif (info.format == \"csv\" || info.format == \"xlsx\") {\r\n\t\t\t\tif ($type.hasValue(this.dataFields.children)) {\r\n\t\t\t\t\tdelete info.dataFields[this.dataFields.children];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn info;\r\n\t\t})\r\n\t\treturn exporting;\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, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\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 || 0;\r\n\t\t\tlet dy: number = this.chart.dy3D || 0;\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 || 0;\r\n\t\tlet dy = this.chart.dy3D || 0;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: 0, y: 0 }) + $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, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\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 || 0;\r\n\t\t\tlet dy: number = this.chart.dy3D || 0;\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 dx: number = this.chart.dx3D || 0;\r\n\t\tlet dy: number = this.chart.dy3D || 0;\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+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t+ $path.lineTo({ x: w + dx, y: dy });\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 * Module that defines everything related to building 3D Columns.\r\n * It is a container which has column3D element which is a Rectangle3D.\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 { Rectangle3D } from \"../../core/elements/3d/Rectangle3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { RadialGradient } from \"../../core/rendering/fills/RadialGradient\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\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 [[Column3D]].\r\n */\r\nexport interface IColumn3DProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Column3D]].\r\n */\r\nexport interface IColumn3DEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Column3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumn3DAdapters extends IColumnAdapters, IColumn3DProperties { }\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 Column3Ds.\r\n *\r\n * @see {@link IColumn3DEvents} for a list of available events\r\n * @see {@link IColumn3DAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Column3D extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumn3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumn3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumn3DEvents;\r\n\r\n\r\n\t/**\r\n\t * column3D element\r\n\t */\r\n\tpublic column3D: Rectangle3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Column3D\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.column3D = this.createChild(Rectangle3D);\r\n\t\tthis.column3D.shouldClone = false;\r\n\t\tthis.column3D.strokeOpacity = 0;\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.column3D;\r\n\t}\r\n\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\tif (this.column3D) {\r\n\t\t\tthis.column3D.width = this.pixelWidth;\r\n\t\t\tthis.column3D.height = this.pixelHeight;\r\n\t\t\tif(this.column3D.invalid){\r\n\t\t\t\tthis.column3D.validate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Column3D]].\r\n\t *\r\n\t * @param source Source Column3D\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.column3D) {\r\n\t\t\tthis.column3D.copyFrom(source.column3D);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets actual `fill` property on the SVG element, including applicable color\r\n\t * modifiers.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Fill\r\n\t */\r\n\tprotected setFill(value: $type.Optional): void {\r\n\t\tsuper.setFill(value);\r\n\t\tthis.column.fill = value;\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[\"Column3D\"] = Column3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Column3D.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 { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\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 * Type of data item.\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t * Type of column.\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 { 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\nimport * as $utils from \"../../core/utils/Utils\";\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 * 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 * This is done because for some reason IE doesn't change mask if path of a\r\n\t * mask changes.\r\n\t */\r\n\tprotected updateSeriesMasks(): void {\r\n\t\tsuper.updateSeriesMasks();\r\n\t\tif ($utils.isIE()) {\r\n\t\t\tlet columnsContainer = this.columnsContainer;\r\n\t\t\tlet mask = columnsContainer.mask;\r\n\t\t\tcolumnsContainer.mask = undefined;\r\n\t\t\tcolumnsContainer.mask = mask;\r\n\t\t}\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 inversed = false;\r\n\t\t\t\tif ((series.baseAxis == series.xAxis && series.xAxis.renderer.inversed) || (series.baseAxis == series.yAxis && series.yAxis.renderer.inversed)) {\r\n\t\t\t\t\tinversed = true;\r\n\t\t\t\t}\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\tif (inversed) {\r\n\t\t\t\t\t\tcolumn.zIndex = 1000 * (1000 - i) + s - series.depthIndex * 100;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\t\t\t\tif(inversed){\r\n\t\t\t\t\ts--;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\ts++;\r\n\t\t\t\t}\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 { 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 { 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\nimport { CalculatedValue } from \"../../core/Component\";\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\t/**\r\n\t * Which calculated field to use to use as a horizontal axis high value for\r\n\t * the item.\r\n\t */\r\n\thighValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis low value for\r\n\t * the item.\r\n\t */\r\n\tlowValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis low value for\r\n\t * the item.\r\n\t */\r\n\tlowValueYShow?: CalculatedValue;\t\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis high value for\r\n\t * the item.\r\n\t */\r\n\thighValueYShow?: CalculatedValue;\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\t/**\r\n\t * Sets type of the column.\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 { 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 { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\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\t/**\r\n\t * Type of column.\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\t// TODO can these be removed ?\r\n\t\t\t\tdataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tdataItem.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\t// TODO can these be removed ?\r\n\t\t\t\tdataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tdataItem.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 } 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\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 { 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 startLocationX:number;\r\n\t\tlet endLocationX:number;\r\n\r\n\t\tlet startLocationY:number;\r\n\t\tlet endLocationY:number;\t\t\r\n\r\n\t\tif(this.baseAxis == this.xAxis){\r\n\t\t\tstartLocationX = this.startLocation;\r\n\t\t\tendLocationX = this.endLocation;\r\n\r\n\t\t\tstartLocationY = this.getAdjustedXLocation(dataItem, this.yOpenField);\r\n\t\t\tendLocationY = this.getAdjustedXLocation(dataItem, this.yField);\r\n\t\t}\r\n\r\n\t\tif(this.baseAxis == this.yAxis){\r\n\t\t\tstartLocationY = this.startLocation;\r\n\t\t\tendLocationY = this.endLocation;\r\n\r\n\t\t\tstartLocationX = this.getAdjustedXLocation(dataItem, this.xOpenField);\r\n\t\t\tendLocationX = this.getAdjustedXLocation(dataItem, this.xField);\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocationX);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocationY);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocationX);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocationY);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -100000, 100000); // 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, -100000, 100000); // 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, -100000, 100000); // 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, -100000, 100000); // 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) {\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 { 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, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\n//import { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\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\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 * Type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Type of column.\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\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\r\n\t\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\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\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\tradarColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\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\trangeColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\t\t\t\t\t\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 = rangeColumn.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.paper = this.paper;\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 = axisRange.contents;\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 * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param xKey Name of X data field\r\n\t * @param yKey Name of Y data field\r\n\t * @param locationX X location\r\n\t * @param locationY Y location\r\n\t * @param stackKeyX ?\r\n\t * @param stackKeyY ?\r\n\t * @returns Coordinates\r\n\t */\r\n\tpublic 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\t/*\r\n\t\tprotected positionBulletReal(bullet:Sprite, positionX:number, positionY:number){\r\n\t\t\t\r\n\t\t\tlet rendererX:AxisRendererCircular = this.xAxis.renderer;\r\n\t\t\tlet rendererY:AxisRendererRadial = this.yAxis.renderer;\r\n\t\t\t\r\n\t\t\tlet angle = rendererX.positionToAngle(positionX);\r\n\t\t\tlet radius = rendererY.positionToCoordinate(positionY);\r\n\t\r\n\t\t\tif(angle < this.chart.startAngle || angle > this.chart.endAngle){\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\r\n\t\t\tbullet.x = $math.cos(angle) * radius;\r\n\t\t\tbullet.y = $math.sin(angle) * radius;\r\n\t\t}*/\r\n\r\n\t/*\r\n\t\tpublic positionBullet(bullet: Bullet) {\r\n\t\t\tsuper.positionBullet(bullet);\r\n\t\r\n\t\t\tlet dataItem:RadarColumnSeriesDataItem = bullet.dataItem;\r\n\t\r\n\t\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\t\tlet xField: string = bullet.xField;\r\n\t\t\tif (!$type.hasValue(xField)) {\r\n\t\t\t\txField = this.xField;\r\n\t\t\t}\r\n\t\r\n\t\t\tlet yField: string = bullet.yField;\r\n\t\t\tif (!$type.hasValue(yField)) {\r\n\t\t\t\tyField = this.yField;\r\n\t\t\t}\r\n\t\r\n\t\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\t\r\n\t\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\t\tif (point) {\r\n\t\t\t\t\tlet xOpenField = this.xOpenField;\r\n\t\t\t\t\tlet yOpenField = this.yOpenField;\r\n\t\t\t\t\tlet angle:number;\r\n\t\t\t\t\tlet radius:number;\r\n\t\r\n\t\t\t\t\tlet xAxis = this.xAxis;\r\n\t\t\t\t\tlet yAxis = this.yAxis;\r\n\t\t\t\t\tlet position:number;\r\n\t\t\t\r\n\t\t\t\t\tif((xAxis instanceof DateAxis && (xOpenField && xOpenField != xField)) || xAxis instanceof ValueAxis){\r\n\t\r\n\t\t\t\t\t\tif(!$type.isNumber(bulletLocationX)){\r\n\t\t\t\t\t\t\tbulletLocationX = 0;\r\n\t\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\t\tlet openValue:number;\r\n\t\t\t\t\t\tlet closeValue:number = dataItem.getWorkingValue(xField);\r\n\t\r\n\t\t\t\t\t\tif(!xOpenField){\r\n\t\t\t\t\t\t\topenValue = xAxis.min;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\topenValue = dataItem.getWorkingValue(xOpenField);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlet middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n\t\r\n\t\t\t\t\t\tposition = xAxis.valueToPosition(middleValue);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if(xAxis instanceof CategoryAxis){\r\n\t\t\t\t\t\tposition = xAxis.categoryToPosition((dataItem)[xField], bulletLocationX);\r\n\t\t\t\t\t}\t\r\n\t\r\n\t\t\t\t\tlet renderer:AxisRendererCircular = xAxis.renderer;\r\n\t\r\n\t\t\t\t\tangle = renderer.positionToAngle(position);\r\n\t\r\n\t\t\t\t\tif(angle < this.chart.startAngle || angle > this.chart.endAngle){\r\n\t\t\t\t\t\tbullet.visible = false;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tif((yAxis instanceof DateAxis && (yOpenField && yOpenField != yField)) || yAxis instanceof ValueAxis){\r\n\t\r\n\t\t\t\t\t\tif(!$type.isNumber(bulletLocationY)){\r\n\t\t\t\t\t\t\tbulletLocationY = 0;\r\n\t\t\t\t\t\t}\t\t\t\t\t\r\n\t\r\n\t\t\t\t\t\tlet openValue:number;\r\n\t\t\t\t\t\tlet closeValue:number = dataItem.getWorkingValue(yField);\r\n\t\r\n\t\t\t\t\t\tif(!yOpenField){\r\n\t\t\t\t\t\t\topenValue = yAxis.min;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\topenValue = dataItem.getWorkingValue(yOpenField);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlet middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n\t\r\n\t\t\t\t\t\tpoint = yAxis.valueToPoint(middleValue);\r\n\t\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\telse if(yAxis instanceof CategoryAxis){\r\n\t\t\t\t\t\tpoint = yAxis.categoryToPoint((dataItem)[yField], bulletLocationY);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tradius = $math.getDistance(point);\r\n\t\t\t\t\t\r\n\t\t\t\t\tbullet.moveTo({x:radius * $math.cos(angle), y:radius * $math.sin(angle)});\r\n\t\r\n\t\t\t\t\tbullet.visible = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tbullet.visible = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}*/\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Module that defines everything related to building Funnel slices.\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 } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\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 [[FunnelSlice]].\r\n */\r\nexport interface IFunnelSliceProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Width of the top edge of the slice.\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Width of the bottom edge of the slice.\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * A relative distance slice's sides should be bent to.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\texpandDistance?: number;\r\n\r\n\t/**\r\n\t * Orientation of the slice.\r\n\t */\r\n\torientation?: Orientation;\r\n}\r\n\r\n/**\r\n * Defines events for [[FunnelSlice]].\r\n */\r\nexport interface IFunnelSliceEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FunnelSlice]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFunnelSliceAdapters extends IContainerAdapters, IFunnelSliceProperties { }\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 create [[FunnelSlice]] elements.\r\n *\r\n * @see {@link IFunnelSliceEvents} for a list of available events\r\n * @see {@link IFunnelSliceAdapters} 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 FunnelSlice extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFunnelSliceProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFunnelSliceAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFunnelSliceEvents;\r\n\r\n\t/**\r\n\t * Main slice element.\r\n\t */\r\n\tpublic slice: Sprite;\r\n\r\n\t/**\r\n\t * Am anchor point the slice tick line is pointing to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @readonly\r\n\t */\r\n\tpublic tickPoint: IPoint;\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.slice = this.createChild(Sprite);\r\n\t\tthis.slice.shouldClone = false;\r\n\t\tthis.slice.setElement(this.paper.add(\"path\"));\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tthis.orientation = \"vertical\";\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.width = 10;\r\n\t\tthis.height = 10;\r\n\r\n\t\tthis.expandDistance = 0;\r\n\r\n\t\tthis.className = \"FunnelSlice\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t */\r\n\tprotected draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tlet pt = this.pixelPaddingTop;\r\n\t\tlet pb = this.pixelPaddingBottom;\r\n\t\tlet pr = this.pixelPaddingRight;\r\n\t\tlet pl = this.pixelPaddingLeft;\r\n\r\n\t\tlet w = this.pixelWidth - pr - pl;\r\n\t\tlet h = this.pixelHeight - pt - pb;\r\n\r\n\t\tlet ed = this.expandDistance;\r\n\r\n\t\tlet path = \"\";\r\n\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, w);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, w);\r\n\r\n\t\t\tlet tl = { x: (w - tw) / 2 + pl, y: pt };\r\n\t\t\tlet tr = { x: (w + tw) / 2 + pl, y: pt };\r\n\r\n\t\t\tlet br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n\t\t\tlet bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n\r\n\t\t\tlet cpr = { x: tr.x + (br.x - tr.x) / 2 + ed * h, y: tr.y + 0.5 * h };\r\n\t\t\tlet cpl = { x: tl.x + (bl.x - tl.x) / 2 - ed * h, y: tl.y + 0.5 * h };\r\n\r\n\t\t\tlet qp1 = $path.lineTo(br);\r\n\t\t\tlet qp2 = \"\";\r\n\r\n\t\t\tif(ed != 0){\r\n\t\t\t\tqp1 = $path.quadraticCurveTo(br, cpr);\r\n\t\t\t\tqp2 = $path.quadraticCurveTo(tl, cpl);\r\n\t\t\t}\r\n\r\n\t\t\tpath = $path.moveTo(tl) + $path.lineTo(tr) + qp1 + $path.lineTo(bl) + qp2;\r\n\r\n\t\t\tthis.tickPoint = { x: tr.x + (br.x - tr.x) / 2, y: tr.y + (br.y - tr.y) / 2 };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, h);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, h);\r\n\r\n\t\t\tlet tt = { x: pl, y: (h - tw) / 2 + pt };\r\n\t\t\tlet tb = { x: pl, y: (h + tw) / 2 + pt };\r\n\r\n\t\t\tlet bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n\t\t\tlet bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n\r\n\t\t\tlet cpr = { y: tt.y + (bt.y - tt.y) / 2 - ed * w, x: tt.x + 0.5 * w };\r\n\t\t\tlet cpl = { y: tb.y + (bb.y - tb.y) / 2 + ed * w, x: tb.x + 0.5 * w };\r\n\r\n\t\t\tlet qp1 = $path.lineTo(bt);\r\n\t\t\tlet qp2 = \"\"\r\n\t\t\tif(ed != 0){\r\n\t\t\t\tqp1 = $path.quadraticCurveTo(bt, cpr);\r\n\t\t\t\tqp2 = $path.quadraticCurveTo(tb, cpl);\r\n\t\t\t}\r\n\r\n\t\t\tpath = $path.moveTo(tb) + $path.lineTo(tt) + qp1 + $path.lineTo(bb) + qp2;\r\n\r\n\t\t\tthis.tickPoint = { y: tb.y + (bb.y - tb.y) / 2, x: tb.x + (bb.x - tb.x) / 2 };\r\n\t\t}\r\n\r\n\t\tthis.slice.path = path;\r\n\t\tthis.invalidateLayout();\r\n\t}\r\n\r\n\r\n\tgetPoint(locationX:number, locationY:number):IPoint{\r\n\r\n\t\tlet pt = this.pixelPaddingTop;\r\n\t\tlet pb = this.pixelPaddingBottom;\r\n\t\tlet pr = this.pixelPaddingRight;\r\n\t\tlet pl = this.pixelPaddingLeft;\r\n\r\n\t\tlet w = this.pixelWidth - pr - pl;\r\n\t\tlet h = this.pixelHeight - pt - pb;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, w);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, w);\r\n\r\n\t\t\tlet tl = { x: (w - tw) / 2 + pl, y: pt };\r\n\t\t\tlet tr = { x: (w + tw) / 2 + pl, y: pt };\r\n\r\n\t\t\tlet br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n\t\t\tlet bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n\r\n\t\t\tlet mlx = tl.x + (bl.x - tl.x) * locationY;\r\n\t\t\tlet mrx = tr.x + (br.x - tr.x) * locationY;\r\n\r\n\t\t\treturn { x: mlx + (mrx - mlx) * locationX, y: tr.y + (br.y - tr.y) * locationY };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, h);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, h);\r\n\r\n\t\t\tlet tt = { x: pl, y: (h - tw) / 2 + pt };\r\n\t\t\tlet tb = { x: pl, y: (h + tw) / 2 + pt };\r\n\r\n\t\t\tlet bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n\t\t\tlet bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n\r\n\t\t\tlet mty = tt.y + (bt.y - tt.y) * locationX;\r\n\t\t\tlet mby = tb.y + (bb.y - tb.y) * locationX;\r\n\r\n\t\t\treturn { y: mty + (mby - mty) * locationY, x: tt.x + (bt.x - tt.x) * locationX };\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent.\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\r\n\t * @param value Bottom width\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"bottomWidth\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return bottom width\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 * Top width in pixels or percent.\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\r\n\t * @param value Top width\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"topWidth\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Top width\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the funnel slice: \"horizontal\" or \"vertical\".\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set orintation if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\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 * @return Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n\t/**\r\n\t * A relative distance slice's sides should be bent to. It's relative to the\r\n\t * height of the slice.\r\n\t *\r\n\t * Zero (default) will mean the sides will be perfectly straight.\r\n\t *\r\n\t * Positive value will make them bend outwards, resulting in \"puffed\" slices.\r\n\t *\r\n\t * Negative values will make them bend inwards.\r\n\t *\r\n\t * @default 0\r\n\t * @param {number}\r\n\t */\r\n\tpublic set expandDistance(value: number) {\r\n\t\tthis.setPropertyValue(\"expandDistance\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return expandDistance\r\n\t */\r\n\tpublic get expandDistance(): number {\r\n\t\treturn this.getPropertyValue(\"expandDistance\");\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Sprite]].\r\n\t *\r\n\t * @param source Source Sprite\r\n\t */\r\n\tpublic copyFrom(source :this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tif (this.slice) {\r\n\t\t\tthis.slice.copyFrom(source.slice);\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[\"FunnelSlice\"] = FunnelSlice;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FunnelSlice.ts","/**\r\n * Funnel 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 { Label } from \"../../core/elements/Label\";\r\nimport { FunnelSlice } from \"./FunnelSlice\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { FunnelSeries } from \"../series/FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $utils from \"../../core/utils/Utils\";\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 [[FunnelTick]].\r\n */\r\nexport interface IFunnelTickProperties extends ITickProperties {\r\n\tlocationX?: number;\r\n\r\n\tlocationY?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FunnelTick]].\r\n */\r\nexport interface IFunnelTickEvents extends ITickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FunnelTick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFunnelTickAdapters extends ITickAdapters, IFunnelTickProperties { }\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 funnel slice connecting it to a related label.\r\n *\r\n * @see {@link IFunnelTickEvents} for a list of available events\r\n * @see {@link IFunnelTickAdapters} for a list of available Adapters\r\n */\r\nexport class FunnelTick extends Tick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFunnelTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFunnelTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFunnelTickEvents;\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