{"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/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///../../../../../src/.internal/charts/axes/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:///./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","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","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","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","getX","getTimeByLocation","baseValue","getY","stack","getValue","getAngle","stackKey","workingLocations","endTime","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","difference","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","validateDataRange","_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","measuredWidth","measuredHeight","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","categories","basePoint","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","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","range","fillPath","path","Path","width","height","dataRangeInvalid","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","dispatchImmediately","appeared","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","isShowing","updateLegendValue","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","type","target","_a","sprites","_b","next","done","sprite","parent","isHidden","isHover","showTooltip","isDisposed","shouldCreateBullet","bulletTemplate","hasValue","positionBullet","bullet","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","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processConfig","config","map","processingErrors","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","Cursor_Cursor","Cursor","_stick","Percent","shouldClone","trackable","clickable","interaction","Interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","event","interactionsEnabled","interactions","isTouchProtected","touch","_generalBehavior","downPoint","isLocalElement","pointer","svg","_stickPoint","fitsToBounds","triggerMove","hideReal","stick","triggerMoveReal","invalidatePosition","getPositions","dispatch","triggerDown","triggerDownReal","setGlobalStyle","Mouse","grabbing","triggerUp","triggerUpReal","updatePoint","upPoint","_upPointOrig","_downPointOrig","getHitOption","default","updateSelection","innerWidth","innerHeight","cancelable","shouldPreventGestures","preventDefault","plotContainer","lockElement","Container","XYCursor_XYCursor","XYCursor","_lineX","_lineY","behavior","maxPanOut","interfaceColors","InterfaceColorSet","selection","createChild","fillOpacity","getFor","lineX","stroke","Color","strokeDasharray","strokeOpacity","lineY","updateSize","_usesSelection","w","_positionPrecision","h","pixelHeight","pixelWidth","validatePosition","fixPoint","snapToSeries","updateLinePositions","getPanningRanges","selectionX","selectionY","getRanges","startX","startY","deltaX","deltaY","xRange","yRange","endX","endY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","reset","_selection","element","_snapToDisposer","handleSnap","opposite","xx","yy","animationDuration","easing","animationEasing","animate","property","to","XYChartScrollbar_XYChartScrollbar","XYChartScrollbar","padding","scrollbarChart","XYChart_XYChart","margin","_scrollbarChart","minHeight","minWidth","unselectedOverlay","toBack","_unselectedOverlay","background","cornerRadius","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","sourceSeries","newValue","zoomOutButton","addXAxis","addYAxis","clone","title","rangeChangeDuration","id","inside","line","minLabelPosition","maxLabelPosition","axisFills","showOnInit","zoomOutAxes","filters","DesaturateFilter","updateByOrientation","orientation","clonedFrom","oldValue","off","handleDataChanged","dataProvider","updateThumb","Scrollbar","XYChart_XYChartDataItem","XYChartDataItem","SerialChart","XYChart","_axisRendererX","AxisRendererX","_axisRendererY","AxisRendererY","maskBullets","arrangeTooltips","chartContainer","layout","topAxesCont","zIndex","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","_bulletMask","exportable","draw","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","inversed","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","updateSeriesMasks","_xAxes","handleAxisRemoval","autoDispose","_yAxes","removeFromInvalidComponents","dataInvalid","colors","_cursor","cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","tapToActivate","setTapToActivate","createCursor","showSeriesTooltip","exceptAxis","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","priority","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","panStartRange","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","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","handleTapToActivate","handleTapToActivateDeactivation","Responsive","relevant","maybeXS","state","stateId","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","tensionX","tensionY","segmentsContainer","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegmentWrapper","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","propertyFields","openIndex","params","openSegment","addToClose","closeIndex","propertiesChanged","getFirst","contents","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","RadarCursor_RadarCursor","RadarCursor","innerRadius","truePixelRadius","updateLineX","updateLineY","fillStartAngle","arc","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","sin","cos","upAngle","upRadius","setPercentProperty","innerRadiusModifyer","AxisFillCircular_AxisFillCircular","AxisFillCircular","AxisFill","GridCircular_GridCircular","GridCircular","pixelPerfect","Grid","AxisRendererCircular_AxisRendererCircular","AxisRendererCircular","pixelRadiusReal","useChartAngles","setAxis","atan2","PI","coordinate","positionToCoordinate","updateAxisLine","gridInnerRadius","toggleVisibility","tickLength","fixPosition","invalidateAxisItems","createGrid","createFill","createLabel","AxisLabelCircular","pointToPosition","coordinateToPosition","AxisRenderer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","horizontalCenter","verticalCenter","rotation","gridLocation","count_1","cellEndLocation","positionItem","updateBaseGridElement","count_2","updateBreakElement","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","bigNum","axisFullLength","RadarChart_RadarChartDataItem","RadarChartDataItem","RadarChart_RadarChart","RadarChart","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","hr","mr","maxRadius","diameter","_pixelInnerRadius","definedBBox","ClockHand_ClockHand","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","_value","newAngle","currentAngle","rotationDirection","updateValue","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","processHand","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries","PieSeries3D_PieSeries3D","PieSeries3D","createSlice","Slice3D","slice","depth","depthPercent","percent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","PercentChart","SlicedChart_SlicedChart","SlicedChart","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","linkWidth","valueHeight","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","container","nextCoordinate","levelCoordinate","nodeCount","showReal","container_1","interpolationEasing","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","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","once","ev","populateString","realX","realY","realWidth","realHeight","virtualParent","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","open_1","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","createColumnTemplate","fromOpenState_1","fromPreviousState_1","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries_TreeMapSeries","TreeMapSeries","configField","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","remove","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","rangeChangeAnimation","_dataDisposers","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","sqrt","i0","i1","row","handleDataItemValueChange","hiddenInLegend","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","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","log","LOG10E","power","pow","reducedCount","getValueUnit","getFormat","_tooltipDurationFormat","_stepDecimalPlaces","tooltipDurationFormat","CircleBullet_CircleBullet","CircleBullet","circle","ErrorBullet_ErrorBullet","ErrorBullet","errorLine","isDynamic","NavigationBar_NavigationBarDataItem","NavigationBarDataItem","DataItem","NavigationBar_NavigationBar","NavigationBar","textLink","TextLink","_linksIterator","triangle","Triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","Component","window","am4charts","charts_namespaceObject"],"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\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\r\n\t\t// Translatable defaults are applied in `applyInternalDefaults()`\r\n\t\t// ...\r\n\r\n\t\t// Define default intervals\r\n\t\tthis.gridIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 5 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 50 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 500 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 5 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"second\", count: 30 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 5 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 15 },\r\n\t\t\t{ timeUnit: \"minute\", count: 30 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"hour\", count: 3 },\r\n\t\t\t{ timeUnit: \"hour\", count: 6 },\r\n\t\t\t{ timeUnit: \"hour\", count: 12 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 2 },\r\n\t\t\t{ timeUnit: \"day\", count: 3 },\r\n\t\t\t{ timeUnit: \"day\", count: 4 },\r\n\t\t\t{ timeUnit: \"day\", count: 5 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 2 },\r\n\t\t\t{ timeUnit: \"month\", count: 3 },\r\n\t\t\t{ timeUnit: \"month\", count: 6 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 2 },\r\n\t\t\t{ timeUnit: \"year\", count: 5 },\r\n\t\t\t{ timeUnit: \"year\", count: 10 },\r\n\t\t\t{ timeUnit: \"year\", count: 50 },\r\n\t\t\t{ timeUnit: \"year\", count: 100 },\r\n\t\t\t{ timeUnit: \"year\", count: 200 },\r\n\t\t\t{ timeUnit: \"year\", count: 500 },\r\n\t\t\t{ timeUnit: \"year\", count: 1000 },\r\n\t\t\t{ timeUnit: \"year\", count: 2000 },\r\n\t\t\t{ timeUnit: \"year\", count: 5000 },\r\n\t\t\t{ timeUnit: \"year\", count: 10000 },\r\n\t\t\t{ timeUnit: \"year\", count: 100000 }\r\n\t\t]);\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"date\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Set default date formats\r\n\t\tif (!this.dateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\t // not a mistake\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"year\")) {\r\n\t\t\tthis.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet periodCount: number = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.maxZoomFactor = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\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\") + 1;\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\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) {\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\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\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param date Date\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param date Date or a timestamp\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param date Date\r\n\t * @return IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param value Value\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack ID\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param key [description]\r\n\t * @param location [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\r\n\t\tif (series._baseInterval[this.uid]) {\r\n\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._baseInterval) {\r\n\t\t\t\tseries._baseInterval[this.uid] = this._baseInterval;\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\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 * @param timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tif (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n\t\t\tthis._baseInterval = timeInterval;\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position\r\n\t * @return Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count, this.getFirstWeekDay(), this.dateFormatter.utc);\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\tlet actualDate = $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\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration * this.renderer.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\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 { 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\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\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}\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 (dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\r\n\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\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\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\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Category\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack key (?)\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\treturn this.positionToAngle(this.categoryToPosition(dataItem.categories[key], location));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Position (px)\r\n\t * @return Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn this.adapter.apply(\"getTooltipText\", dataItem.category);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\t\tif (position < 0) {\r\n\t\t\tposition = 0;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet difference: number = endIndex - startIndex;\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\tlet index: number = null;\r\n\r\n\t\t// in case we have some axis breaks\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartPosition: number = axisBreak.startPosition;\r\n\t\t\tlet breakEndPosition: number = axisBreak.endPosition;\r\n\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tbreakStartIndex = $math.max(breakStartIndex, startIndex);\r\n\t\t\tbreakEndIndex = $math.min(breakEndIndex, endIndex);\r\n\r\n\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\tdifference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\r\n\t\t\t// position to the right of break end\r\n\t\t\tif (position > breakEndPosition) {\r\n\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t}\r\n\t\t\t// position to the left of break start\r\n\t\t\telse if (position < breakStartPosition) {\r\n\r\n\t\t\t}\r\n\t\t\t// value within break\r\n\t\t\telse {\r\n\t\t\t\tlet breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n\t\t\t\tindex = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = Math.floor(position * difference + startIndex);\r\n\t\t}\r\n\t\tif (index >= endIndex) {\r\n\t\t\tindex--;\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * 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 { 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.setProperty(\"openCategoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryX(): string {\r\n\t\treturn this.categories.openCategoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on Y category axis.\r\n\t *\r\n\t * @param category Category\r\n\t */\r\n\tpublic set openCategoryY(category: string) {\r\n\t\tthis.setProperty(\"openCategoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get openCategoryY(): string {\r\n\t\treturn this.categories.openCategoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Return smallest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMin(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet min: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value < min || !$type.isNumber(min)) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn min;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Return biggest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param fields Fields to check in\r\n\t * @param working Include working (temporary) values\r\n\t * @param stackValue If item is in a stack, the value item starts as\r\n\t * @return Value\r\n\t */\r\n\tpublic getMax(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet max: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value > max || !$type.isNumber(max)) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn max;\r\n\t\t//}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Defines property set for a [[XYSeries]] tooltip event that contains information about dataItem\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t */\r\n\tdataItem: XYSeriesDataItem;\r\n};\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for horizontal axis.\r\n\t */\r\n\tvalueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for vertical axis.\r\n\t */\r\n\tvalueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for horizontal axis.\r\n\t */\r\n\tcategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for vertical axis.\r\n\t */\r\n\tcategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for horizontal axis.\r\n\t */\r\n\tdateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for vertical axis.\r\n\t */\r\n\tdateY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for horizontal\r\n\t * axis.\r\n\t */\r\n\topenValueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for vertical\r\n\t * axis.\r\n\t */\r\n\topenValueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for horizontal axis.\r\n\t */\r\n\topenCategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for vertical axis.\r\n\t */\r\n\topenCategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for horizontal axis.\r\n\t */\r\n\topenDateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for vertical axis.\r\n\t */\r\n\topenDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis value for the\r\n\t * item.\r\n\t */\r\n\tvalueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis open value for\r\n\t * the item.\r\n\t */\r\n\topenValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tstacked?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\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\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 tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _baseInterval: { [index: string]: ITimeInterval } = {};\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYSeries\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.cursorTooltipEnabled = true;\r\n\r\n\t\tthis.cursorHoverEnabled = true;\r\n\r\n\t\tthis.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\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\t\t\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}\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\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared || this.start != 0 || this.end != 1) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\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\r\n\t/**\r\n\t * Shows series tooltip at specific dataItem.\r\n\t *\r\n\t * @param dataItem\r\n\t */\r\n\tpublic showTooltipAtDataItem(dataItem: this[\"_dataItem\"]): IPoint {\r\n\t\tthis.returnBulletDefaultState(dataItem);\r\n\t\tif (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, dataItem.locations[tooltipXField], dataItem.locations[tooltipYField]);\r\n\r\n\t\t\t\t\tif (tooltipPoint) {\r\n\r\n\t\t\t\t\t\tthis.tooltipX = tooltipPoint.x;\r\n\t\t\t\t\t\tthis.tooltipY = tooltipPoint.y;\r\n\r\n\t\t\t\t\t\tif (this._prevTooltipDataItem != dataItem) {\r\n\t\t\t\t\t\t\tthis.dispatchImmediately(\"tooltipshownat\", {\r\n\t\t\t\t\t\t\t\ttype: \"tooltipshownat\",\r\n\t\t\t\t\t\t\t\ttarget: this,\r\n\t\t\t\t\t\t\t\tdataItem: dataItem\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\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}\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\treturn true;\r\n\t}\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?\r\n\t *\r\n\t * @default false\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param duration Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axis ranges\r\n\t\t\tif ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n\t\t\t\tfor (let i = 0, len = config.axisRanges.length; i < len; i++) {\r\n\t\t\t\t\tlet range = config.axisRanges[i];\r\n\t\t\t\t\tif (!$type.hasValue(range.type)) {\r\n\t\t\t\t\t\trange.type = \"AxisDataItem\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.axis);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Parse date fields based on the series fields\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tthis.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * 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, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t *\r\n\t * If set to `true` (default), the tooltips set for all series item's\r\n\t * elements like columns and bullets will be automatically shown\r\n\t * when [[XYCursor]] passes over category/date, even if its not hovered\r\n\t * directly over the item.\r\n\t *\r\n\t * Set this to `false` to disable such behavior and display item-specific\r\n\t * tooltips only when hovered directly over them\r\n\t *\r\n\t * @default true\r\n\t * @param value Display tooltip?\r\n\t */\r\n\tpublic set cursorTooltipEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Display tooltip?\r\n\t */\r\n\tpublic get cursorTooltipEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorTooltipEnabled\");\r\n\t}\r\n\r\n\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}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/XYSeries.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { getInteraction, IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IInteractionObjectEvents } from \"../../core/interaction/InteractionObjectEvents\";\r\nimport { IPoint, } from \"../../core/defs/IPoint\";\r\nimport { Chart } from \"../Chart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Cursor]].\r\n */\r\nexport interface ICursorProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Cursor]].\r\n */\r\nexport interface ICursorEvents extends IContainerEvents {\r\n\r\n\t/**\r\n\t * Invoked when position of cursor changes.\r\n\t */\r\n\tcursorpositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts selecting a range with a cursor, e.g. presses\r\n\t * down mouse button and drags the cursor.\r\n\t */\r\n\tselectstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when selection has ended, e.g. user releases mouse button.\r\n\t */\r\n\tselectended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts zooming using cursor.\r\n\t */\r\n\tzoomstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user clicked to start zooming/panning/selecting but haven't\r\n\t * finished the operation.\r\n\t */\r\n\tbehaviorcanceled: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done zooming using cursor.\r\n\t */\r\n\tzoomended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts panning using cursor.\r\n\t */\r\n\tpanstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done panning using cursor.\r\n\t */\r\n\tpanended: {};\r\n\r\n\t/**\r\n\t * Invoked when user is panning using cursor.\r\n\t */\r\n\tpanning: {};\r\n}\r\n\r\n/**\r\n * Defines adapters for [[Cursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICursorAdapters extends IContainerAdapters, ICursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Main Cursor class with common cursor functionality.\r\n *\r\n * Chart-specific cursors must extend this class.\r\n *\r\n * @see {@link ICursorEvents} for a list of available events\r\n * @see {@link ICursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class Cursor extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICursorEvents;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection started.\r\n\t */\r\n\tpublic downPoint: IPoint;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection ended.\r\n\t */\r\n\tpublic upPoint: IPoint;\r\n\r\n\t/**\r\n\t * Current cursor position during selection.\r\n\t *\r\n\t * @todo Better description\r\n\t */\r\n\tpublic point: IPoint = { x: 0, y: 0 };\r\n\r\n\t/**\r\n\t * Relative horizontal position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic xPosition: number;\r\n\r\n\t/**\r\n\t * Relative vertical position.\r\n\t *\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic yPosition: number;\r\n\r\n\t/**\r\n\t * [_usesSelection description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _usesSelection: boolean;\r\n\r\n\t/**\r\n\t * What to do when user pressed down and drags cursor: zoom or select.\r\n\t */\r\n\tprotected _generalBehavior: \"zoom\" | \"select\" | \"pan\"; // todo: draw\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: Chart;\r\n\r\n\t/**\r\n\t * Specifies the rules when cursor needs to be moved or hidden.\r\n\t */\r\n\tprotected _stick: \"hard\" | \"soft\" | \"none\" = \"none\";\r\n\r\n\t/**\r\n\t * A screen point that cursor is \"stuck\" to.\r\n\t */\r\n\tprotected _stickPoint: IPoint;\r\n\r\n\t/**\r\n\t * non-modified down point\r\n\t * @ignore\r\n\t */\r\n\tprotected _downPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * non-modified up point\r\n\t * @ignore\r\n\t */\r\n\tprotected _upPointOrig: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"Cursor\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\t\tthis.shouldClone = false;\r\n\r\n\t\tthis.hide(0);\r\n\r\n\t\tthis.trackable = true;\r\n\t\tthis.clickable = true;\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// Add events on body to trigger down and up events (to start zooming or\r\n\t\t// selection)\r\n\t\tconst interaction = getInteraction();\r\n\t\tthis._disposers.push(interaction.body.events.on(\"down\", this.handleCursorDown, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"up\", this.handleCursorUp, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"track\", this.handleCursorMove, this));\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handle pointer movement in document and update cursor position as needed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleCursorMove(event: IInteractionObjectEvents[\"track\"]): IPoint {\r\n\r\n\r\n\t\tif (!this.interactionsEnabled || (this.interactions.isTouchProtected && event.touch)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t * @param stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\tthis.point = point;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// hide cursor if it's out of bounds\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.show(0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// unless we are selecting (mouse is down)\r\n\t\t\t\tif (!this.downPoint) {\r\n\t\t\t\t\tthis.hide(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tswitch (this._generalBehavior) {\r\n\t\t\t\tcase \"zoom\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"zoomended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"select\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"selectended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pan\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"panended\");\r\n\t\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t\tthis.updateSelection();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\r\n\t\tif (!this.interactionsEnabled || (this.interactions.isTouchProtected && event.touch) || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get local point\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tthis._downPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.shouldPreventGestures(event.touch) && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Determines whether Cursor should prevent default action on move.\r\n\t *\r\n\t * Child classes should override this as necessary.\r\n\t * \r\n\t * @return Prevent default?\r\n\t */\r\n\tprotected shouldPreventGestures(touch: boolean): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis._upPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer, IDisposer } from \"../../core/utils/Disposer\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYCursor]].\r\n */\r\nexport interface IXYCursorProperties extends ICursorProperties {\r\n\r\n\t/**\r\n\t * Cursor's behavior when moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally; (default)\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * @default \"zoomX\"\r\n\t */\r\n\tbehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineX?: boolean;\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t */\r\n\tfullWidthLineY?: boolean;\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t * Specifies to which series cursor lines should be snapped. Works when one\r\n\t * of the axis is `DateAxis` or `CategoryAxis`. Won't work if both axes are\r\n\t * `ValueAxis`.\r\n\t */\r\n\tsnapToSeries: XYSeries;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYCursor]].\r\n */\r\nexport interface IXYCursorEvents extends ICursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYCursorAdapters extends ICursorAdapters, IXYCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\tprotected _snapToDisposer: IDisposer;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYCursor\";\r\n\r\n\t\t// Defaults\r\n\t\tthis.behavior = \"zoomX\";\r\n\r\n\t\tthis.maxPanOut = 0.1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Create selection element\r\n\t\tlet selection: Sprite = this.createChild(Sprite);\r\n\t\tselection.shouldClone = false;\r\n\t\tselection.fillOpacity = 0.2;\r\n\t\tselection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tselection.isMeasured = false;\r\n\t\tselection.interactionsEnabled = false;\r\n\t\tthis.selection = selection;\r\n\t\tthis._disposers.push(this.selection);\r\n\r\n\t\t// Create cursor's vertical line\r\n\t\tlet lineX: Sprite = this.createChild(Sprite);\r\n\t\tlineX.shouldClone = false;\r\n\t\tlineX.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineX.fill = color();\r\n\t\tlineX.strokeDasharray = \"3,3\";\r\n\t\tlineX.isMeasured = false;\r\n\t\tlineX.strokeOpacity = 0.4;\r\n\t\tlineX.interactionsEnabled = false;\r\n\t\tlineX.y = 0;// important\r\n\t\tthis.lineX = lineX;\r\n\t\tthis._disposers.push(this.lineX);\r\n\r\n\t\t// Create cursor's horizontal line\r\n\t\tlet lineY: Sprite = this.createChild(Sprite);\r\n\t\tlineY.shouldClone = false;\r\n\t\tlineY.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineY.fill = color();\r\n\t\tlineY.strokeDasharray = \"3,3\";\r\n\t\tlineY.isMeasured = false;\r\n\t\tlineY.strokeOpacity = 0.4;\r\n\t\tlineY.interactionsEnabled = false;\r\n\t\tlineY.x = 0; // important\r\n\t\tthis.lineY = lineY;\r\n\t\tthis._disposers.push(this.lineY);\r\n\r\n\t\t// Add handler for size changes\r\n\t\tthis.events.on(\"sizechanged\", this.updateSize, this, false);\r\n\r\n\t\tthis._disposers.push(this._lineX);\r\n\t\tthis._disposers.push(this._lineY);\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.mask = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tif ((this.snapToSeries && !this.snapToSeries.isHidden)) {\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.updateLinePositions(point);\r\n\t\t}\r\n\r\n\t\tif (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tthis.getPanningRanges();\r\n\t\t\t\tthis.dispatch(\"panning\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\t\tpoint = this.fixPoint(this.point);\r\n\r\n\t\tif (this.lineX && this.lineX.visible && !this.xAxis) {\r\n\t\t\tthis.lineX.x = point.x;\r\n\t\t}\r\n\t\tif (this.lineY && this.lineY.visible && !this.yAxis) {\r\n\t\t\tthis.lineY.y = point.y;\r\n\t\t}\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.downPoint = { x: point.x, y: point.y };\r\n\r\n\t\t\t\tthis.updatePoint(point);\r\n\r\n\t\t\t\t//this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n\r\n\t\t\t\tthis.point.x = this.downPoint.x;\r\n\t\t\t\tthis.point.y = this.downPoint.y;\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\t\t\t\tlet selectionX: number = this.downPoint.x;\r\n\t\t\t\tlet selectionY: number = this.downPoint.y;\r\n\r\n\t\t\t\tif (this._usesSelection) {\r\n\t\t\t\t\tselection.x = selectionX;\r\n\t\t\t\t\tselection.y = selectionY;\r\n\t\t\t\t\tselection.path = \"\";\r\n\t\t\t\t\tselection.show();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerDownReal(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.downPoint = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t\tif (this.lineX) {\r\n\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > getInteraction().getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tif (this.downPoint) {\r\n\t\t\t\tthis.upPoint = point;\r\n\r\n\t\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\t\tthis.getRanges();\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerUpReal(point);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.selection.hide(0);\r\n\r\n\t\t\t// reset cursor style, just in case\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tlet interaction = getInteraction();\r\n\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.downPoint = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\t$utils.used(this.selection);\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Behavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Determines whether Cursor should prevent default action on move.\r\n\t *\r\n\t * If cursor's behavior is \"none\", it should not obstruct the page scrolling.\r\n\t *\r\n\t * @return Prevent default?\r\n\t */\r\n\tprotected shouldPreventGestures(touch: boolean): boolean {\r\n\t\treturn (!this.interactions.isTouchProtected || !touch) && this.behavior != \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\tthis._xAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return X axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\treturn this._xAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to Y [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis Y axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tif (this._yAxis.get() != axis) {\r\n\t\t\tthis._yAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\treturn this._yAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet x: number = point.x;\r\n\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.x = x;\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineX.x = x;\r\n\t\t\t\tlet width: number = endPoint.x - startPoint.x;\r\n\t\t\t\tthis.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when Y axis changes position or scale.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet y: number = point.y;\r\n\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.y = y;\r\n\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineY.y = y;\r\n\t\t\t\tlet height: number = endPoint.y - startPoint.y;\r\n\t\t\t\tthis.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use for X axis.\r\n\t *\r\n\t * @param lineX Line\r\n\t */\r\n\tpublic set lineX(lineX: Sprite) {\r\n\t\tif (lineX) {\r\n\t\t\tlineX.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineX.interactionsEnabled = false;\r\n\t\t\tlineX.parent = this;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineX.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineX(): Sprite {\r\n\t\treturn this._lineX.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use Y axis.\r\n\t *\r\n\t * @param lineY Line\r\n\t */\r\n\tpublic set lineY(lineY: Sprite) {\r\n\t\tif (lineY) {\r\n\t\t\tlineY.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineY.parent = this;\r\n\t\t\tlineY.interactionsEnabled = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineY.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Line element\r\n\t */\r\n\tpublic get lineY(): Sprite {\r\n\t\treturn this._lineY.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A selection element ([[Sprite]]).\r\n\t *\r\n\t * @param selection Selection rectangle\r\n\t */\r\n\tpublic set selection(selection: Sprite) {\r\n\t\tthis._selection = selection;\r\n\t\tif (selection) {\r\n\t\t\tselection.element = this.paper.add(\"path\");\r\n\t\t\tselection.parent = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Selection rectangle\r\n\t */\r\n\tpublic get selection(): Sprite {\r\n\t\treturn this._selection;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n\t * with real references.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(config.snapToSeries) && $type.isString(config.snapToSeries)) {\r\n\t\t\t\tif (this.map.hasKey(config.snapToSeries)) {\r\n\t\t\t\t\tconfig.snapToSeries = this.map.getKey(config.snapToSeries);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No series with id \\\"\" + config.snapToSeries + \"\\\" found for `series`\");\r\n\t\t\t\t\tdelete config.snapToSeries;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies to which series cursor lines should be snapped. Works when one\r\n\t * of the axis is `DateAxis` or `CategoryAxis`. Won't work if both axes are\r\n\t * `ValueAxis`.\r\n\t *\r\n\t * @param {XYSeries}\r\n\t */\r\n\tpublic set snapToSeries(series: XYSeries) {\r\n\t\tif (this.setPropertyValue(\"snapToSeries\", series)) {\r\n\t\t\tif (this._snapToDisposer) {\r\n\t\t\t\tthis._snapToDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (series) {\r\n\t\t\t\tthis._snapToDisposer = series.events.on(\"tooltipshownat\", this.handleSnap, this, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYSeries}\r\n\t */\r\n\tpublic get snapToSeries(): XYSeries {\r\n\t\treturn this.getPropertyValue(\"snapToSeries\");\r\n\t}\r\n\r\n\t/**\r\n\t * [handleSnap description]\r\n\t *\r\n\t * @ignore\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleSnap() {\r\n\r\n\t\tlet series = this.snapToSeries;\r\n\t\tlet y = series.tooltipY;\r\n\t\tlet x = series.tooltipX;\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tif (this.xAxis.renderer.opposite) {\r\n\t\t\t\ty -= this.pixelHeight;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.point = { x: x, y: y };\r\n\t\tthis.getPositions();\r\n\r\n\t\tlet xx = x;\r\n\t\tlet yy = y;\r\n\r\n\t\tx -= this.pixelWidth;\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tif (this.yAxis.renderer.opposite) {\r\n\t\t\t\tx += this.pixelWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet tooltip = series.tooltip;\r\n\t\tlet duration = tooltip.animationDuration;\r\n\t\tlet easing = tooltip.animationEasing;\r\n\r\n\t\tif (series.baseAxis == series.xAxis) {\r\n\t\t\tseries.yAxis.showTooltipAtPosition(this.yPosition);\r\n\t\t}\r\n\r\n\t\tif (series.baseAxis == series.yAxis) {\r\n\t\t\tseries.xAxis.showTooltipAtPosition(this.xPosition);\r\n\t\t}\r\n\r\n\t\tthis.lineX.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\tthis.lineY.animate([{ property: \"x\", to: x }], duration, easing);\r\n\r\n\t\tif (!this.xAxis) {\r\n\t\t\tthis.lineX.animate([{ property: \"x\", to: xx }], duration, easing);\r\n\t\t}\r\n\t\tif (!this.yAxis) {\r\n\t\t\tthis.lineY.animate([{ property: \"y\", to: yy }], duration, easing);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Destroys this object and all related data.\r\n\t */\r\n\tpublic dispose(){\r\n\t\tthis.hide(0);\r\n\t\tsuper.dispose();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYCursor\"] = XYCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/XYCursor.ts","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar, IScrollbarProperties, IScrollbarAdapters, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarProperties extends IScrollbarProperties { }\r\n\r\n/**\r\n * Defines events for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarEvents extends IScrollbarEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChartScrollbar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartScrollbarAdapters extends IScrollbarAdapters, IXYChartScrollbarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A special version of the Scrollbar that has an XY chart in it.\r\n *\r\n * Used mainly as an advanced scrollbar with a preview for other XY charts.\r\n *\r\n * However, can be used as standalone element.\r\n *\r\n * @see {@link IXYChartScrollbarEvents} for a list of available events\r\n * @see {@link IXYChartScrollbarAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class XYChartScrollbar extends Scrollbar {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChartScrollbarEvents;\r\n\r\n\t/**\r\n\t * An [[XYSeries]] used to draw a graph on the Scrollbar.\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * A chart element Scrollbar is for.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart instance that shows mini-chart within Scrollbar.\r\n\t */\r\n\tprotected _scrollbarChart: XYChart;\r\n\r\n\t/**\r\n\t * [_unselectedOverlay description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _unselectedOverlay: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartScrollbar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\tlet scrollbarChart: XYChart = this.createChild(XYChart);\r\n\t\tscrollbarChart.shouldClone = false;\r\n\t\tscrollbarChart.margin(0, 0, 0, 0);\r\n\t\tscrollbarChart.padding(0, 0, 0, 0);\r\n\t\tscrollbarChart.interactionsEnabled = false;\r\n\r\n\t\tthis._scrollbarChart = scrollbarChart;\r\n\t\tthis._disposers.push(this._scrollbarChart);\r\n\r\n\t\tthis.minHeight = 60;\r\n\t\tthis.minWidth = 60;\r\n\r\n\t\tlet unselectedOverlay: Sprite = this.createChild(Sprite);\r\n\t\tunselectedOverlay.shouldClone = false;\r\n\t\tunselectedOverlay.setElement(this.paper.add(\"path\"));\r\n\t\tunselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n\t\tunselectedOverlay.fillOpacity = 0.8;\r\n\t\tunselectedOverlay.interactionsEnabled = false;\r\n\t\tunselectedOverlay.isMeasured = false;\r\n\t\tunselectedOverlay.toBack();\r\n\t\tthis._unselectedOverlay = unselectedOverlay;\r\n\t\tthis._disposers.push(this._unselectedOverlay);\r\n\r\n\t\tscrollbarChart.toBack();\r\n\r\n\t\tthis.background.cornerRadius(0, 0, 0, 0);\r\n\r\n\t\tlet thumbBackground = this.thumb.background;\r\n\t\tthumbBackground.cornerRadius(0, 0, 0, 0);\r\n\t\tthumbBackground.fillOpacity = 0;\r\n\t\tthumbBackground.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\tlet hoverState = thumbBackground.states.getKey(\"hover\");\r\n\t\tif (hoverState) {\r\n\t\t\thoverState.properties.fillOpacity = 0.2;\r\n\t\t}\r\n\r\n\t\tlet downState = thumbBackground.states.getKey(\"down\");\r\n\t\tif (downState) {\r\n\t\t\tdownState.properties.fillOpacity = 0.4;\r\n\t\t}\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of series that are used to draw graph(s) on the scrollbar.\r\n\t *\r\n\t * @readonly\r\n\t * @return Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n\t\t\tthis._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.newValue;\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\tscrollbarChart.zoomOutButton.disabled = true;\r\n\r\n\t\tthis.chart = sourceSeries.chart;\r\n\r\n\t\tlet addXAxis: boolean = true;\r\n\t\tlet addYAxis: boolean = true;\r\n\r\n\t\t// check if we haven't added clone of x or y axis before\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series != sourceSeries) {\r\n\t\t\t\tif (series.xAxis == sourceSeries.xAxis) {\r\n\t\t\t\t\taddXAxis = false;\r\n\t\t\t\t}\r\n\t\t\t\tif (series.yAxis == sourceSeries.yAxis) {\r\n\t\t\t\t\taddYAxis = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet series: XYSeries = sourceSeries.clone();\r\n\r\n\t\tif (addXAxis) {\r\n\r\n\t\t\tlet xAxis = sourceSeries.xAxis.clone();\r\n\t\t\tscrollbarChart.xAxes.moveValue(xAxis);\r\n\t\t\txAxis.title.disabled = true;\r\n\t\t\txAxis.rangeChangeDuration = 0;\r\n\t\t\txAxis.id = sourceSeries.uid;\r\n\t\t\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\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.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;\t\t\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\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\tif (this._scrollbarChart) {\r\n\t\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, 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 { DateAxis } from \"../axes/DateAxis\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Scrollbar, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { XYCursor, IXYCursorEvents } from \"../cursors/XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IDisposer, 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 * @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\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\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\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 * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tlet cursor = this.cursor;\r\n\r\n\t\tif (cursor.visible && !cursor.isHiding) {\r\n\t\t\tlet xPosition: number = this.cursor.xPosition;\r\n\t\t\tlet yPosition: number = this.cursor.yPosition;\r\n\r\n\t\t\tthis.showSeriesTooltip({\r\n\t\t\t\tx: xPosition,\r\n\t\t\t\ty: yPosition\r\n\t\t\t});\r\n\r\n\t\t\tlet exceptAxis: Axis;\r\n\t\t\tlet snapToSeries = cursor.snapToSeries;\r\n\t\t\tif (snapToSeries) {\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.xAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.yAxis;\r\n\t\t\t\t}\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.yAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\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\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;\t\t\t\t\r\n\t\t\t}\r\n\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\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\trange.end = axis.roundPosition(range.end + 0.0001, 0);\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\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n\r\n\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\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.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\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (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\r\n\t/*\r\n public positionBullet(bullet: Bullet): void {\r\n\t super.positionBullet(bullet);\r\n\r\n\t let dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t if (dataItem.segment) {\r\n\t\t $object.softCopyProperties(dataItem.segment, bullet, visualProperties);\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.disposeChildren();\r\n\r\n\t\tlet line: Line = marker.createChild(Line);\r\n\t\tline.shouldClone = false;\r\n\t\t//line.copyFrom(this); coppies events which is not good\r\n\t\t$object.copyProperties(this, line, visualProperties);\r\n\r\n\t\tline.x2 = w;\r\n\t\tline.y = h / 2;\r\n\t\tline.visible = true;\r\n\r\n\t\tif (this.fillOpacity > 0) {\r\n\t\t\tlet fill: Rectangle = marker.createChild(Rectangle);\r\n\t\t\t//fill.copyFrom(this); coppies events which is not good\r\n\t\t\t$object.copyProperties(this, fill, visualProperties);\r\n\t\t\tfill.width = w;\r\n\t\t\tfill.height = h;\r\n\t\t\tfill.y = 0;\r\n\t\t\tfill.strokeOpacity = 0;\r\n\t\t\tfill.visible = true;\r\n\r\n\t\t\tline.y = 0;\r\n\t\t}\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.stroke;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\r\n\t\t$iter.eachContinue(this.bullets.iterator(), (bullet) => {\r\n\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\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}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.mask = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point to check\r\n\t * @return Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","/**\r\n * ============================================================================\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\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\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlabel.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererCircular\"] = AxisRendererCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","/**\r\n * 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\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = chart.dataItems.length;\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angle here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param value Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param value Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet count = chart.dataItems.length;\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number): void {\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (0-1)\r\n\t * @return Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n\t\treturn this.coordinateToPosition(coordinate);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererRadial\"] = AxisRendererRadial;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","/**\r\n * Radar chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { 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\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Cursor, of type suitable for RadarChart.\r\n\t *\r\n\t * @return Cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new RadarCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet 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 { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t */\r\n\tpublic hands: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected processHand(event: IListEvents[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { 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\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 = 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\tlevels.push(this.getNodeLevel(link.fromNode, level + 1));\r\n\t\t\t}\r\n\t\t})\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).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\t/**\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: ColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of column elements.\r\n\t */\r\n\tprotected _columns: ListTemplate;\r\n\r\n\t/**\r\n\t * Container to put column elements in.\r\n\t */\r\n\tprotected _columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Start location within cell for columns.\r\n\t */\r\n\tprotected _startLocation: number = 0;\r\n\r\n\t/**\r\n\t * End location within cell for columns.\r\n\t */\r\n\tprotected _endLocation: number = 1;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t */\r\n\tprotected _dropFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t */\r\n\tprotected _dropFromPreviousState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t */\r\n\tprotected _riseFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t */\r\n\tprotected _riseFromPreviousState: SpriteState;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\t\tthis.fillOpacity = 1;\r\n\r\n\t\tthis.clustered = true;\r\n\r\n\t\tlet columnsContainer = this.mainContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis._columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = 0; i < this.startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tfor (let i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = 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)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet rightLocation = dataItem.locations[xField];\r\n\t\t\tlet leftLocation = dataItem.locations[xOpenField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.xAxis instanceof ValueAxis) {\r\n\t\t\t\trightLocation = 0;\r\n\t\t\t\tleftLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, rightLocation);\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = 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\r\n\t\t\t\t// accessibility\r\n\t\t\t\tif (this.itemsFocusable()) {\r\n\t\t\t\t\tcolumn.role = \"menuitem\";\r\n\t\t\t\t\tcolumn.focusable = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcolumn.role = \"listitem\";\r\n\t\t\t\t\tcolumn.focusable = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (column.focusable) {\r\n\t\t\t\t\tcolumn.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t\tif (column.hoverable) {\r\n\t\t\t\t\tcolumn.events.once(\"over\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"out\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn = dataItem.column;\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.width = w;\r\n\t\t\tcolumn.height = h;\r\n\r\n\t\t\tcolumn.x = x;\r\n\t\t\tcolumn.y = y;\r\n\r\n\t\t\tcolumn.realX = l;\r\n\t\t\tcolumn.realY = t;\r\n\r\n\t\t\tcolumn.realWidth = r - l;\r\n\t\t\tcolumn.realHeight = b - t;\r\n\r\n\t\t\tcolumn.parent = this.columnsContainer;\r\n\t\t\tcolumn.virtualParent = this;\r\n\r\n\t\t\tthis.setColumnStates(column);\r\n\r\n\t\t\tif (column.invalid) {\r\n\t\t\t\tcolumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.__disabled = false;\r\n\t\t\t//column.returnAfterTemp();\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: this[\"_column\"] = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t//$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\r\n\t\t\t\trangeColumn.width = w;\r\n\t\t\t\trangeColumn.height = h;\r\n\t\t\t\trangeColumn.x = x;\r\n\t\t\t\trangeColumn.y = y;\r\n\r\n\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\r\n\t\t\t\tif (rangeColumn.invalid) {\r\n\t\t\t\t\trangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\t//rangeColumn.returnAfterTemp();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tdataItem.itemWidth = w;\r\n\t\tdataItem.itemHeight = h;\r\n\t}\r\n\r\n\r\n\tdisableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\tdataItem.column.width = 0;\r\n\t\t\t\tdataItem.column.height = 0;\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t * @param value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.fill;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.columns.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { 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\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\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\tdataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t})\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate(){\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/TreeMapSeries.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Series of children data items.\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a duration (ms) the Data Item should take to animate from one\r\n\t * value to another.\r\n\t *\r\n\t * If the duration is not specified via parameter, this method will try to\r\n\t * request a default duration from the related `Component`.\r\n\t *\r\n\t * @param duration Default duration (ms)\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic getDuration(): number {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\r\n\t\tlet value = 0;\r\n\t\tif (!this.children || this.children.length == 0) {\r\n\t\t\tvalue = this.values[\"value\"].workingValue;\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\tlet childValue = child.value;\r\n\t\t\t\tif ($type.isNumber(childValue)) {\r\n\t\t\t\t\tvalue += childValue;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t\t/*\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;*/\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * Series of children data items\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (series != this._series) {\r\n\t\t\tif (this._series) {\r\n\t\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\t\tthis._series.dispose();\r\n\t\t\t}\r\n\t\t\tthis._series = series;\r\n\t\t\tthis._disposers.push(series);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMap]].\r\n */\r\nexport interface ITreeMapDataFields extends IXYChartDataFields {\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum 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;\t\t\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\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.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() {\t\t\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\t\t\t\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\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, 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: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, 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 */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tif (this.chart && this.chart.columnsContainer) {\r\n\t\t\treturn this.chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif(dataItem.column){\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif(this.chart){\r\n\t\t\tthis.chart.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the layout (padding and scrollbar positions) to accommodate for\r\n\t * 3D depth and angle.\r\n\t */\r\n\tprotected fixLayout(): void {\r\n\r\n\t\tthis.chartContainer.marginTop = -this.dy3D;\r\n\t\tthis.chartContainer.paddingRight = this.dx3D;\r\n\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.scrollbarX.dy = this.dy3D;\r\n\t\t\tthis.scrollbarX.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.scrollbarY.dy = this.dy3D;\r\n\t\t\tthis.scrollbarY.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tthis.fixColumns();\r\n\r\n\t\tsuper.fixLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count );\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\r\n\t\t\t\tlet 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;\t\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;\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { 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\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t */\r\n\thighDateY?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]) {\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet yAxisFieldName: string = $utils.capitalize(this.yAxis.axisFieldName);\r\n\t\t\tthis._yLowField = <$type.Keyof>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\tthis._yHighField = <$type.Keyof>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t}\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet xAxisFieldName: string = $utils.capitalize(this.xAxis.axisFieldName);\r\n\t\t\tthis._xLowField = <$type.Keyof>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\tthis._xHighField = <$type.Keyof>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t}\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xLowField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xHighField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yLowField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yHighField);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { 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\r\n\t/**\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\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 startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocation);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocation);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocation);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty0 = $math.fitToRange(y0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\tx1 = $math.fitToRange(x1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty1 = $math.fitToRange(y1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers && this.connect) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment Segment\r\n\t * @param points Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param value No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { 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\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\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;\t\t\t\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\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 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}\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